请教关于ACE_WFMO_Reactor_Handler_Repository的问题
ACE_WFMO_Reactor_Handler_Repository包含了三种类型的数组Current_Info、To_Be_Added_Info、Suspended_Info。当向ACE_Reactor注册事件处理器时,会调用至int result = ::WSAEventSelect ((SOCKET) io_handle,event_handle,new_network_events);之后调用 this->handler_rep_.bind_i ,该函数建立IO句柄与ACE_Event_Handler的关联结构体,并放入To_Be_Added_Info中。但在移除该ACE_Event_Handler时,是从Current_Info移除的(单从名字上应该可以看出三个数组应该维护结构体的三种状态)。那么注册的ACE_Event_Handler的绑定结构体是什么时候从To_Be_Added_Info移至Current_Info的?ACE_WFMO_Reactor_Handler_Repository::bind_i 中有下面语句:
// Wake up all threads in WaitForMultipleObjects so that they can
// reconsult the handle set
this->wfmo_reactor_.wakeup_all_threads ();
唤醒所有等待的线程重商handle set?跟进wakeup_all_threads 中语句:
this->wakeup_all_threads_.signal ();
wakeup_all_threads在ACE_WMF_Reactor创建时就与ACE_Wakeup_All_Threads_Handler绑定并注册signal事件,所以wakeup_all_threads_.signal ();会触发ACE_Wakeup_All_Threads_Handler::handle_signal,但这个函数里什么都没做!
注册的ACE_Event_Handler的绑定结构体究竟是什么时候从To_Be_Added_Info移至Current_Info的?
还有能不能讲讲Current_Info、To_Be_Added_Info、Suspended_Info之间的转换以及发生的代码?
多谢了!
自己顶顶
版主还没上线?!自己顶下先 自己再来顶顶~~~~~~~~~~~~! 哈哈,今天找到了,在ACE_WFMO_Reactor_Handler_Repository::make_change()函数里!描述了三个数组的三个状态之间转换。搜索一下make_change,就能发现其调用过程了,不好意思,问了个弱智问题。
页:
[1]