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_ptrboost::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); }