static void run_svc (ACE_HANDLE handle) { // The <callback> object is an <ACE_Event_Handler> created on the // stack. This is normally not a good idea, but in this case it // works because the ACE_Reactor is destroyed before leaving this // scope as well, so it'll remove the <callback> object from its // internal tables BEFORE it is destroyed. Ping_Pong callback (string_name, handle); // Note that we put the <reactor> AFTER the <callback> so that the // <reactor> will get shutdown first. ACE_Reactor reactor; // Register the callback object for the various I/O, signal, and // timer-based events. if (reactor.register_handler (&callback, ACE_Event_Handler::READ_MASK | ACE_Event_Handler::WRITE_MASK) == -1 #if !defined (CHORUS) || reactor.register_handler (SIGINT, &callback) == -1 #endif /* CHORUS */ || reactor.schedule_timer (&callback, 0, SHUTDOWN_TIME) == -1) { ACE_ERROR ((LM_ERROR, "%p\n", "reactor")); ACE_OS::exit (1); } // Main event loop (one per process). while (callback.is_set () == 0) if (reactor.handle_events () == -1) ACE_ERROR ((LM_ERROR, "%p\n", "handle_events")); }
static void run_svc (ACE_HANDLE handle) { Ping_Pong *callback = 0; ACE_NEW (callback, Ping_Pong (ACE_TEXT_ALWAYS_CHAR (string_name), handle)); ACE_Reactor reactor; // Register the callback object for the various I/O, signal, and // timer-based events. if (reactor.register_handler (callback, ACE_Event_Handler::READ_MASK | ACE_Event_Handler::WRITE_MASK) == -1 #if !defined (CHORUS) || reactor.register_handler (SIGINT, callback) == -1 #endif /* CHORUS */ || reactor.schedule_timer (callback, 0, SHUTDOWN_TIME) == -1) { ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("reactor"))); ACE_OS::exit (1); } // Main event loop (one per process). while (callback->is_set () == 0) if (reactor.handle_events () == -1) ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("handle_events"))); }