找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 5375|回复: 2

ace_dev_poll_reactor无法同时派发handle_input和handle_output, 请求帮助

[复制链接]
发表于 2012-6-21 18:25:02 | 显示全部楼层 |阅读模式
ace_dev_poll_reactor无法同时派发handle_input和handle_output, 我看了ace的源码, dev_poll_reactor.cpp里面的dispatch_io_event函数部分代码:
ACE_Reactor_Mask disp_mask = 0;
      ACE_Event_Handler *eh = info->event_handler;
      int (ACE_Event_Handler::*callback)(ACE_HANDLE) = 0;
      if (ACE_BIT_ENABLED (revents, out_event))
        {
          disp_mask = ACE_Event_Handler::WRITE_MASK;
          callback = &ACE_Event_Handler::handle_output;
          ACE_CLR_BITS (revents, out_event);
        }
      else if (ACE_BIT_ENABLED (revents, exc_event))
        {
          disp_mask = ACE_Event_Handler::EXCEPT_MASK;
          callback = &ACE_Event_Handler::handle_exception;
          ACE_CLR_BITS (revents, exc_event);
        }
      else if (ACE_BIT_ENABLED (revents, in_event))
        {
          disp_mask = ACE_Event_Handler::READ_MASK;
          callback = &ACE_Event_Handler::handle_input;
          ACE_CLR_BITS (revents, in_event);
        }
      else if (ACE_BIT_ENABLED (revents, err_event))
        {
          this->remove_handler_i (handle,
                                  ACE_Event_Handler::ALL_EVENTS_MASK,
                                  info->event_handler);
这里面用的是if else 结构, 不可能同时派发到handle_input和handle_output啊, 这个怎么办呢, 我的代码需要处理handle_output啊, 希望知道的朋友告诉我下, 谢谢了
发表于 2012-6-21 20:52:58 | 显示全部楼层
逻辑上,只能一次处理一个啊!反正是通知处理,这样写没错啊
 楼主| 发表于 2012-6-26 15:51:02 | 显示全部楼层
但是系统会一直触发handle_output回调, 却没有一次回调handle_input, 这是什么问题呢, 不信的话, 你可以用ace_dev_poll_reactor试试, 这个问题,我一直没有找到原因, 谢谢
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-5-2 02:33 , Processed in 0.017884 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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