//Example 4
#include "ace/Reactor.h"
#include "ace/Event_Handler.h"
#include "ace/Synch_T.h"
#include "ace/Thread_Manager.h"
#define WAIT_TIME
1
#define SLEEP_TIME
2
class My_Handler: public ACE_Event_Handler{
 public:
 //Start the event handling process.
 My_Handler(){
  ACE_DEBUG((LM_DEBUG,"Event Handler created\n"));
  ACE_Reactor::instance()->max_notify_iterations(5);
  return 0;
  }
//Perform the notifications i.e., notify the reactor
10 times
 void perform_notifications(){
  for(int i=0;i<10;i++)
   ACE_Reactor::instance()->
     notify(this,ACE_Event_Handler::READ_MASK);
  }
 
 //The actual handler which in this case
will handle the notifications
 int handle_input(int){
  ACE_DEBUG((LM_DEBUG,"Got notification # %d\n",no));
  no++;
  return 0;
  }
private:
 static int no;
};
//Static members
int My_Handler::no=1;
 
int main(int argc, char *argv[]){
  //Instantiating the handler
 My_Handler handler;
 
 //The done flag is set to not done yet.
 int done=0;
while(1){
  //After WAIT_TIME the handle_events will
fall through if no events arrive.
  ACE_Reactor::instance()->handle_events(ACE_Time_Value(WAIT_TIME));
  if(!done){
   handler.perform_notifications();
   done=1;
   }
  sleep(SLEEP_TIME);
 }
}