Насколько я понимаю, чтобы завершить этот поток таймера, мне нужно вызвать stop () для объекта io_service.Я делаю это так, чтобы объект MyClass (также работающий как поток) не заканчивался активным исключением, когда завершается его поток.
Как отменить объект io_service в стандартном потоке, используя лямбду?
class MyClass
{
private:
boost::asio::io_service io;
// ...
}
void MyClass::operator()()
{
boost::asio::deadline_timer my_timer(io,
boost::posix_time::seconds(300));
my_timer.async_wait(boost::bind(&MyTest::pump, this,
boost::asio::placeholders::error, &my_timer));
std::unique_ptr<std::thread> io_thread(
std::make_unique<std::thread>([&] { io.run(); }));
// ...
// cancel here.
}