void notify (ACE_Reactor &reactor, ACE_Event_Handler *event_handler, int extra_iterations_needed) { ACE_Thread_Manager thread_manager; // Create a thread to run the event loop. Event_Loop_Thread event_loop_thread (thread_manager, reactor, extra_iterations_needed); int result = event_loop_thread.activate (); ACE_ASSERT (result == 0); for (int i = 0; i < iterations; ++i) { ACE_OS::sleep (ACE_Time_Value (0, 500 * 1000)); result = reactor.notify (event_handler, ACE_Event_Handler::READ_MASK); ACE_ASSERT (result == 0); } thread_manager.wait (); }
void testing (ACE_Reactor *reactor, int make_invocations, int run_event_loop_thread, int run_purger_thread, int run_receiver_thread, int nested_upcalls) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n(%t) Configuration:\n") ACE_TEXT ("\tInvocation thread = %d\n") ACE_TEXT ("\tEvent Loop thread = %d\n") ACE_TEXT ("\tPurger thread = %d\n") ACE_TEXT ("\tReceiver thread = %d\n") ACE_TEXT ("\tNested Upcalls = %d\n\n"), make_invocations, run_event_loop_thread, run_purger_thread, run_receiver_thread, nested_upcalls)); ACE_Thread_Manager thread_manager; int result = 0; // Create the connection cache. Connection_Cache connection_cache; ACE_Auto_Event new_connection_event; // Create the invocation thread. Invocation_Thread invocation_thread (thread_manager, *reactor, connection_cache, new_connection_event, make_invocations, run_receiver_thread, nested_upcalls); result = invocation_thread.activate (); ACE_TEST_ASSERT (result == 0); // Create the thread for closing the server socket. Close_Socket_Thread close_socket_thread (thread_manager, *reactor, new_connection_event, make_invocations, run_receiver_thread); result = close_socket_thread.activate (); ACE_TEST_ASSERT (result == 0); global_event_loop_thread_variable = 0; // Create a thread to run the event loop. Event_Loop_Thread event_loop_thread (thread_manager, *reactor); if (run_event_loop_thread) { global_event_loop_thread_variable = &event_loop_thread; result = event_loop_thread.activate (); ACE_TEST_ASSERT (result == 0); } // Create a thread to run the purger. Purger_Thread purger_thread (thread_manager, *reactor, connection_cache); if (run_purger_thread) { result = purger_thread.activate (); ACE_TEST_ASSERT (result == 0); } // Wait for threads to exit. result = thread_manager.wait (); ACE_TEST_ASSERT (result == 0); // Set the global variable to zero again because the // event_loop_thread exists on the stack and now // gets destructed. global_event_loop_thread_variable = 0; }