Multithreading 从另一个线程自动取消asio异步计时器

Multithreading 从另一个线程自动取消asio异步计时器,multithreading,boost,timer,cancellation,Multithreading,Boost,Timer,Cancellation,我有一个定期运行的boost-deadline\u计时器(如示例所示): 在那个单独的线程函数中 但也许有人知道解决这个问题的更优雅的方法 实际上,这两种方法都不太安全,只是因为deadline\u timer是安全的 在国际海事组织,最简单和安全的方法是发布取消: //... timer.get_io_service().post([&]{timer.cancel();}) //... 注意:在实数代码中,必须确保计时器超过函子(lambda) 更新:正如@sehe所提到的,此解决方

我有一个定期运行的boost-deadline\u计时器(如示例所示):

在那个单独的线程函数中


但也许有人知道解决这个问题的更优雅的方法

实际上,这两种方法都不太安全,只是因为
deadline\u timer
是安全的

在国际海事组织,最简单和安全的方法是
发布
取消:

//...
timer.get_io_service().post([&]{timer.cancel();})
//...
注意:在实数代码中,必须确保
计时器
超过函子(lambda)


更新:正如@sehe所提到的,此解决方案可能不起作用-因为当计时器不再等待时,取消处理程序可能出现在
io\u服务
队列中,就在
print
之前。

请注意,这可能会导致竞争条件(发布的
cancel()
可能发生在
异步等待
未挂起时)。见例。
while (timer.cancel() == 0) {
}
//...
timer.get_io_service().post([&]{timer.cancel();})
//...