【发布时间】:2010-01-18 21:12:54
【问题描述】:
我有一个模块来管理我的应用程序中的计时器。这个类基本上有三个功能:
ACE_Reactor 的实例被模块内部用于管理定时器。
- 调度计时器 - 调用 ACE_Reactor::schedule_timer()。 其中一个参数是一个回调,在计时器到期时调用。
- 取消计时器 - 调用 ACE_Reactor::cancel_timer()
reactor 在执行的私有计时器中执行,因此调度/取消和超时回调在不同的线程中执行。
ACE_Reactor::schedule_timer() 接收堆分配结构(arg 参数)。
这个结构后来在取消计时器或调用超时处理程序时被删除。 但是由于取消和超时处理程序是在不同的线程中执行的,所以看起来结构被删除了两次。
在调用超时处理程序时,反应器是否有责任确保定时器被取消?
【问题讨论】:
-
你检查
cancel_timer的结果吗?它还有助于获得有关管理堆分配结构删除的方式的更多信息。是否在处理程序的handle_close方法中删除?
标签: c++ multithreading ace