使用boost :: asio实现事件计时器

时间:2011-05-20 19:04:31

标签: c++ events boost timer boost-asio

示例代码看起来很长,但实际上它并不那么复杂: - )

我要做的是,当用户调用EventTimer.Start()时,它将{{1}每隔interval毫秒执行一次回调处理程序(传递给ctor) }次。

您只需要查看函数EventTimer :: Stop()

repeatCount

我不知道为什么我第二次调用EventTimer :: Start()根本不起作用。我的问题是:

  1. 我该怎么办? EventTimer :: Stop()以便重置 一切都是为了下次的 调用Start()会起作用吗?

  2. 还有什么需要修改的吗?

  3. 如果我使用另一个线程来启动EventTimer :: Start()(请参阅main函数中的注释代码),该线程何时实际退出?

  4. 感谢。

    彼得

3 个答案:

答案 0 :(得分:2)

Sam暗示,根据你想要完成的事情,大多数时候停止io_service被视为设计错误。您不需要stop() / reset() io_service来重新安排计时器。

通常情况下,您会将运行的线程或线程池保留到io_service,然后您可以使用io_service安排所需的任何事件。使用io_service机制,将其留给io_service按要求发送您的预定工作,然后您只需使用{{1}处理您安排的事件或工作请求}。

答案 1 :(得分:1)

我并不完全清楚你想要完成什么,但是你发布的代码中有一些不正确的东西。

    只有在io_service::reset()的上一次调用停止或作为documentation describes失去工作后才能调用
  1. io_service::run()
  2. 您不需要显式调用Sleep(),只要有工作要做,对io_service::run()的调用就会阻止。

答案 2 :(得分:0)

我明白了,但我不知道为什么我必须将io.reset()放在Start()中,因为它已经在Stop()中被调用了。

请参阅帖子中的更新代码。