找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3160|回复: 3

请教关于ACE_WFMO_Reactor_Handler_Repository的问题

[复制链接]
发表于 2009-12-2 12:29:43 | 显示全部楼层 |阅读模式
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之间的转换以及发生的代码?
多谢了!
 楼主| 发表于 2009-12-2 20:31:36 | 显示全部楼层

自己顶顶

版主还没上线?!自己顶下先
 楼主| 发表于 2009-12-3 09:09:01 | 显示全部楼层
自己再来顶顶~~~~~~~~~~~~!
 楼主| 发表于 2009-12-3 10:17:34 | 显示全部楼层
哈哈,今天找到了,在ACE_WFMO_Reactor_Handler_Repository::make_change()函数里!描述了三个数组的三个状态之间转换。搜索一下make_change,就能发现其调用过程了,不好意思,问了个弱智问题。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-23 13:40 , Processed in 0.019493 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表