lcabcdefg 发表于 2012-6-21 18:25:02

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

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啊, 希望知道的朋友告诉我下, 谢谢了

winston 发表于 2012-6-21 20:52:58

逻辑上,只能一次处理一个啊!反正是通知处理,这样写没错啊

lcabcdefg 发表于 2012-6-26 15:51:02

但是系统会一直触发handle_output回调, 却没有一次回调handle_input, 这是什么问题呢, 不信的话, 你可以用ace_dev_poll_reactor试试, 这个问题,我一直没有找到原因, 谢谢
页: [1]
查看完整版本: ace_dev_poll_reactor无法同时派发handle_input和handle_output, 请求帮助