I'm trying to have a file automatically close when a deadline_timer is expired. Seeing that a file is no longer open, another file will get created and a timer started.
But I'm having some issues understanding deadline_timer. I believe the io.run() in start_timer blocks (thinking that async_wait shouldn't block), so I tried to put it on it's own thread so that my main would continue to loop and write to the file while a timer is running in the background which would eventually close the file.
Anyone see where I'm going wrong?
---
void MyFileTimer::start_timer()
{
ba::deadline_timer timer(io, boost::posix_time::seconds(10));
timer.async_wait(boost::bind(&MyFileTimer::timer_expired, this, _1));
t_thread = unique_ptr<boost::thread>(
new boost::thread(boost::bind(&ba::io_service::run, &io)));
io.run();
}
void MyFileTimer::timer_expired(const boost::system::error_code& e)
{
// Closing file
my_file.flush();
my_file.close();
io.reset();
t_thread->join();
}
bool MyFileTimer::create_file()
{
// ...
string filename = my_unique_file_name;
my_file.open(filename, ios::out);
start_timer();
return true;
}
--- snip of main ---
while (true) {
if (!my_file.is_open()) {
create_file();
}
my_file->write(str);
}