0

我有一个在我的应用程序中管理计时器的模块。这个类基本上具有三个功能:

模块内部使用 ACE_Reactor 的实例来管理定时器。

  • 调度计时器 - 调用 ACE_Reactor::schedule_timer()。其中一个参数是回调,在计时器操作时调用。
  • 取消计时器 - 调用 ACE_Reactor::cancel_timer()

反应器在执行的私有计时器中执行,因此调度/取消和超时回调在不同的线程中执行。

ACE_Reactor::schedule_timer()接收堆分配结构(arg参数)。

这个结构后来在取消计时器或调用超时处理程序时被删除。但是由于取消和超时处理程序是在不同的线程中执行的,因此看起来结构被删除了两次。

调用超时处理程序时,反应器是否有责任确保定时器被取消?

4

1 回答 1

0

AFAIK 这种情况绝对是可能的ACE_TP_Reactor。使用 TP-reactor,超时不会在同一个线程上同步。即,当您正在执行某个其他线程时,可能会发生超时。handle_input您将必须同步事件。一个干净的方法是调整ACE_Event_Handler接口以进行同步。

于 2010-01-20T06:40:08.933 回答