找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 5041|回复: 1

ACE_Event_Handler类的handle_input方法返回值的意义

[复制链接]
发表于 2010-1-5 23:01:53 | 显示全部楼层 |阅读模式
我是ACE的初学者,书上说handle_input如果返回0,则把该事件处理器类保留在ACE_Reactor中,如果返回-1,则从ACE_Reactor中隐式的删除,可是

  1 #include "ace/Reactor.h"
  2 #include "ace/Event_Handler.h"
  3 #include <iostream>
  4 using namespace std;
  5
  6 class My_Handler:public ACE_Event_Handler
  7 {
  8 public:
  9     My_Handler()
10     {
11         ACE_Reactor::instance()->max_notify_iterations(5);
12     }
13
14     void perform_notification()
15     {
16         for(int i = 0; i != 10; ++i)
17             ACE_Reactor::instance()->notify(this,ACE_Event_Handler::READ_MASK);
18     }
19
20     int handle_input(int)
21     {
22         cout<<"hello"<<endl;
23         return -1;
24     }
25 };
26
27 int main()
28 {
29     My_Handler handler;
30     int done = 0;
31     ACE_Time_Value time(1);
32     while(1)
33     {
34         ACE_Reactor::instance()->handle_events(&time);
35         if(!done)
36         {
37             handler.perform_notification();
38             done = 1;
39         }
40         sleep(3);
41     }
42
43 }

不论handle_input返回-1还是0,最终都是打印10次hello字符串。

请问handle_input的返回值的含义到底如何解释?如果My_Handler对象从ACE_Reactor中隐式删除的话,我的理解是只打印一次hello字符串啊
发表于 2010-1-7 16:42:34 | 显示全部楼层
需要调用ACE_Reactor::instance()->purge_pending_notifications
因为通知的处理优先级高于IO事件。

另外如果楼主不熟悉Reactor的通知机制的话,
最好不要贸然使用,会无缘无故吃很多亏的。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-12-23 13:14 , Processed in 0.098347 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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