peakzhang 发表于 2008-9-10 23:03:21

ACE_Reactor中使用register_handle()的注意事项

前几天做一个基于UDP的服务器。需要建立多个处理器,其中一个处理器为主服务,同时侦听2~4个端口;其它为子服务,都针对一个端口。子服务是根据客户端的请求,动态生成的。
       由于主服务同时侦听侦听2~4个端口,所以使用了register_handle()一个3参数变体:register_handler (const ACE_Handle_Set &handles, ACE_Event_Handler *event_handler, ACE_Reactor_Mask masks);
      子服务使用的是register_handle()常用的2参数变体:register_handler (ACE_Event_Handler *event_handler, ACE_Reactor_Mask mask)
      编译一路ok,但在实际运行过程中,当需要动态生成子服务时,报错register_handle()的参数错误。在网上查找,也没有找到如何解决。
      后来,怀疑是在一个Reactor实例中(我所有的服务使用ACE_Reactor::instance() )只能用一种register_handle()变体。于是将所有的register_handle()调用统一改为:register_handler (ACE_HANDLE io_handle, ACE_Event_Handler *event_handler, ACE_Reactor_Mask mask)。
      问题解决,可以动态生成子服务,并完成相应的功能。

ztenv 发表于 2011-3-3 10:08:37

学习了,一年前也遇到了这个问题
页: [1]
查看完整版本: ACE_Reactor中使用register_handle()的注意事项