如何检查boost :: deadline_timer是否处于活动状态

时间:2011-01-04 13:03:46

标签: c++ boost boost-asio

检查deadline_timer是否有效的任何方法?例如如果它处于async_wait状态并且没有被取消?

4 个答案:

答案 0 :(得分:7)

如果取消定时器(以及正常超时),将调用超时处理程序并显示错误条件。那么你可以在调用async_wait之前简单地设置一个bool,然后在设置错误条件的情况下在处理程序中重置它吗?

答案 1 :(得分:2)

有三种选择:

  1. 创建自己的计时器类(当然使用deadline_timer),它有自己的do_async_wait成员。在此成员中,您可以设置一个成员变量,然后可以在内部deadline_timer上调用async_wait之前从bool isWaiting()成员或类似成员返回该变量。请注意,我不认为async_wait成员是虚拟的,因此您不能仅从deadline_timer继承并覆盖。请注意,您还需要在调用处理程序时重置标志(通过使自己的计时器成为处理程序然后转发到任何其他处理程序)或者调用cancel时。

  2. 编辑助推器代码以执行您想要的操作。据我所知,这是完全合法的,但这当然不是一个很好的选择。

  3. 改变您的要求/设计,以便您不需要知道这一点。

答案 2 :(得分:2)

这个怎么样?

boost::asio::deadline_timer mTimer;
const bool timerExpired = (mTimer.expires_at()
  <= boost::posix_time::second_clock::local_time());

答案 3 :(得分:1)

我知道此时这有点旧,但我还有另一个可能的建议:如何获得实现,然后请求是否有可能等待的等待。它看起来像这样:

\r