示例代码看起来很长,但实际上它并不那么复杂: - )
我要做的是,当用户调用EventTimer.Start()时,它将{{1}每隔interval
毫秒执行一次回调处理程序(传递给ctor) }次。
您只需要查看函数EventTimer :: Stop()
repeatCount
我不知道为什么我第二次调用EventTimer :: Start()根本不起作用。我的问题是:
我该怎么办? EventTimer :: Stop()以便重置 一切都是为了下次的 调用Start()会起作用吗?
还有什么需要修改的吗?
如果我使用另一个线程来启动EventTimer :: Start()(请参阅main函数中的注释代码),该线程何时实际退出?
感谢。
彼得
答案 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失去工作后才能调用io_service::run()
。Sleep()
,只要有工作要做,对io_service::run()
的调用就会阻止。答案 2 :(得分:0)
我明白了,但我不知道为什么我必须将io.reset()
放在Start()
中,因为它已经在Stop()中被调用了。
请参阅帖子中的更新代码。