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字符串啊 需要调用ACE_Reactor::instance()->purge_pending_notifications
因为通知的处理优先级高于IO事件。
另外如果楼主不熟悉Reactor的通知机制的话,
最好不要贸然使用,会无缘无故吃很多亏的。
页:
[1]