zsxcn 发表于 2010-1-5 23:01:53

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

我是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字符串啊

modern 发表于 2010-1-7 16:42:34

需要调用ACE_Reactor::instance()->purge_pending_notifications
因为通知的处理优先级高于IO事件。

另外如果楼主不熟悉Reactor的通知机制的话,
最好不要贸然使用,会无缘无故吃很多亏的。
页: [1]
查看完整版本: ACE_Event_Handler类的handle_input方法返回值的意义