【发布时间】:2019-05-17 17:20:39
【问题描述】:
看完这些……
Cancelling boost asio deadline timer safely
Atomically cancel asio asynchronious timer from another thread
...我想尝试澄清一下用法。
根据第一个引用的问题,在计时器过期但在其处理程序运行之前取消计时器是行不通的。这种“飞行中”计时器的处理程序仍然正常运行。
这带来了一个生命周期问题... 一个常见的使用模式是让计时器成为类的成员,并让其到期处理程序引用该父类。父类可以从其析构函数中取消计时器,但在上述情况下似乎存在崩溃风险,因为在处理程序运行时计时器和父类都不再存在。
如果确实如此,如何解决?我们可以在处理程序中将 std::weak_ptr 捕获到父类并在继续之前对其进行检查,但并非每个父类都可以通过 std::shared_ptr 管理其生命周期。
【问题讨论】:
标签: boost-asio asio