我有一个管理定时器的模块。这个课程有三个功能:
ACE_Reactor的实例在模块内部用于管理计时器。
反应器在执行的私有定时器中执行,因此调度/取消和超时回调在不同的线程中执行。
ACE_Reactor::schedule_timer()收到堆分配结构( arg 参数)。
此结构稍后在取消计时器或调用超时处理程序时删除。 但是由于取消和超时处理程序在不同的线程中执行,所以看起来有结构被删除两次的情况。
在调用超时处理程序时,是否有责任确保取消定时器?
答案 0 :(得分:0)
AFAIK这种情况绝对可以通过ACE_TP_Reactor
来实现。使用TP反应器,超时不会在同一个线程上同步。即当您在某个其他线程中执行handle_input
时,可能会发生超时。您必须同步事件。一种干净的方法是调整ACE_Event_Handler
接口以进行同步。