【发布时间】:2011-01-04 13:03:46
【问题描述】:
有什么方法可以检查deadline_timer 是否处于活动状态?例如如果它处于 async_wait 状态并且没有被取消?
【问题讨论】:
标签: c++ boost boost-asio
有什么方法可以检查deadline_timer 是否处于活动状态?例如如果它处于 async_wait 状态并且没有被取消?
【问题讨论】:
标签: c++ boost boost-asio
如果定时器被取消(以及正常的超时),超时处理程序将被调用并带有错误条件。那么你能不能在调用 async_wait 之前简单地设置一个布尔值,然后在设置了错误条件时在处理程序中重置它?
【讨论】:
想到三个选项:
创建您自己的计时器类(当然使用deadline_timer),它有自己的do_async_wait 成员。在此成员中,您设置一个成员变量,然后可以从 bool isWaiting() 成员或类似成员返回,然后再调用内部截止时间计时器上的 async_wait。请注意,我不认为 async_wait 成员是虚拟的,因此您不能只继承自 dead_timer 并覆盖。请注意,您还需要在调用处理程序时(通过将您自己的计时器设置为处理程序,然后转发到任何其他处理程序)或调用取消时重置标志。
编辑 boost 代码来做你想做的事。据我所知,这是完全合法的,但这当然不是一个很好的选择。
更改您的要求/设计,这样您就不需要知道这一点。
【讨论】:
这个怎么样?
boost::asio::deadline_timer mTimer;
const bool timerExpired = (mTimer.expires_at()
<= boost::posix_time::second_clock::local_time());
【讨论】:
我知道这在这一点上有点老了,但我有另一个可能的建议:获取实现然后请求是否可能存在待处理的等待。它看起来像这样:
mTimer.get_implementation().might_have_pending_waits
【讨论】: