我有一个在我的应用程序中管理计时器的模块。这个类基本上具有三个功能:
模块内部使用 ACE_Reactor 的实例来管理定时器。
- 调度计时器 - 调用 ACE_Reactor::schedule_timer()。其中一个参数是回调,在计时器操作时调用。
- 取消计时器 - 调用 ACE_Reactor::cancel_timer()
反应器在执行的私有计时器中执行,因此调度/取消和超时回调在不同的线程中执行。
ACE_Reactor::schedule_timer()接收堆分配结构(arg参数)。
这个结构后来在取消计时器或调用超时处理程序时被删除。但是由于取消和超时处理程序是在不同的线程中执行的,因此看起来结构被删除了两次。
调用超时处理程序时,反应器是否有责任确保定时器被取消?