void simple (ACE_Timer_Queue &timer_queue) { int events = 0; int result = 0; long timer_id = -1; { Simple_Event_Handler *handler = new Simple_Event_Handler; timer_id = timer_queue.schedule (handler, one_second_timeout, ACE_Time_Value (1) + timer_queue.gettimeofday (), ACE_Time_Value (1)); ACE_ASSERT (timer_id != -1); result = timer_queue.cancel (timer_id, 0, 0); ACE_ASSERT (result == 1); } { Simple_Event_Handler *handler = new Simple_Event_Handler; timer_id = timer_queue.schedule (handler, one_second_timeout, ACE_Time_Value (1) + timer_queue.gettimeofday (), ACE_Time_Value (1)); ACE_ASSERT (timer_id != -1); events += 3; } for (int i = 0; i < events;) { WAIT_FOR_NEXT_EVENT (timer_queue); result = timer_queue.expire (); ACE_ASSERT (result >= 0); i += result; } timer_queue.cancel (timer_id, 0, 0); }
void expire (ACE_Timer_Queue &timer_queue, Expire_Function expire_function) { int events = 0; int result = 0; Reference_Counted_Event_Handler *handler = new Reference_Counted_Event_Handler (1); ACE_Event_Handler_var safe_handler (handler); long timer_id = timer_queue.schedule (handler, one_second_timeout, ACE_Time_Value (1) + timer_queue.gettimeofday (), ACE_Time_Value (1)); ACE_ASSERT (timer_id != -1); result = timer_queue.schedule (handler, two_second_timeout, ACE_Time_Value (2) + timer_queue.gettimeofday ()); ACE_ASSERT (result != -1); events += 4; for (int i = 0; i < events;) { WAIT_FOR_NEXT_EVENT (timer_queue); result = expire_function (timer_queue); ACE_ASSERT (result >= 0); i += result; } timer_queue.cancel (timer_id, 0, 0); }
int invoke_one_upcall (ACE_Timer_Queue &timer_queue) { // Get the current time ACE_Time_Value current_time (timer_queue.gettimeofday () + timer_queue.timer_skew ()); // Look for a node in the timer queue whose timer <= the present // time. ACE_Timer_Node_Dispatch_Info dispatch_info; if (timer_queue.dispatch_info (current_time, dispatch_info)) { const void *upcall_act = 0; // Preinvoke. timer_queue.preinvoke (dispatch_info, current_time, upcall_act); // Call the functor timer_queue.upcall (dispatch_info, current_time); // Postinvoke timer_queue.postinvoke (dispatch_info, current_time, upcall_act); // We have dispatched a timer return 1; } return 0; }
void cancellation (ACE_Timer_Queue &timer_queue, int repeat_timer, int cancel_handler, int second_timer, int dont_call_handle_close) { int result = 0; int expected_number_of_handle_close_calls = -1; if (!dont_call_handle_close) { if (cancel_handler) expected_number_of_handle_close_calls = 1; else if (second_timer) expected_number_of_handle_close_calls = 2; else expected_number_of_handle_close_calls = 1; } Reference_Counted_Event_Handler *handler = new Reference_Counted_Event_Handler (expected_number_of_handle_close_calls); ACE_Event_Handler_var safe_handler (handler); long first_timer_id = -1; long second_timer_id = -1; if (repeat_timer) { first_timer_id = timer_queue.schedule (handler, one_second_timeout, ACE_Time_Value (1) + timer_queue.gettimeofday (), ACE_Time_Value (1)); ACE_ASSERT (first_timer_id != -1); } else { first_timer_id = timer_queue.schedule (handler, one_second_timeout, ACE_Time_Value (1) + timer_queue.gettimeofday ()); ACE_ASSERT (first_timer_id != -1); } if (second_timer) { second_timer_id = timer_queue.schedule (handler, two_second_timeout, ACE_Time_Value (2) + timer_queue.gettimeofday (), ACE_Time_Value (2)); ACE_ASSERT (second_timer_id != -1); } if (cancel_handler) { result = timer_queue.cancel (handler, dont_call_handle_close); if (second_timer) ACE_ASSERT (result == 2); else ACE_ASSERT (result == 1); } else { result = timer_queue.cancel (first_timer_id, 0, dont_call_handle_close); ACE_ASSERT (result == 1); if (second_timer) { result = timer_queue.cancel (second_timer_id, 0, dont_call_handle_close); ACE_ASSERT (result == 1); } } }