diff options
Diffstat (limited to 'examples/Timer_Queue/Thread_Timer_Queue_Test.cpp')
-rw-r--r-- | examples/Timer_Queue/Thread_Timer_Queue_Test.cpp | 291 |
1 files changed, 0 insertions, 291 deletions
diff --git a/examples/Timer_Queue/Thread_Timer_Queue_Test.cpp b/examples/Timer_Queue/Thread_Timer_Queue_Test.cpp deleted file mode 100644 index e62107b7e78..00000000000 --- a/examples/Timer_Queue/Thread_Timer_Queue_Test.cpp +++ /dev/null @@ -1,291 +0,0 @@ -// $Id$ - -// ============================================================================ -// -// = LIBRARY -// examples -// -// = FILENAME -// Thread_Timer_Queue_Test.cpp -// -// = DESCRIPTION -// This test exercises the <ACE_Thread_Timer_Queue_Adapter> -// using an <ACE_Timer_Heap>. -// -// = AUTHORS -// Carlos O'Ryan and Douglas C. Schmidt -// -// ============================================================================ - -#include "ace/Task.h" -#include "ace/Timer_Heap_T.h" -#include "ace/Timer_Queue_Adapters.h" - -#include "Thread_Timer_Queue_Test.h" - -// Administrivia methods... -Handler::Handler(const ACE_Time_Value &expiration_time) - : expires_ (expiration_time), - id_ (0) -{ -} - -Handler::~Handler (void) -{ -} - -void -Handler::set_id (int id) -{ - this->id_ = id; -} - -// This is the method invoked when the Timer expires. - -int -Handler::handle_timeout (const ACE_Time_Value ¤t_time, - const void *) -{ - ACE_Time_Value delay = current_time - this->expires_; - - // No need to protect this printf is always called from a Async safe - // point. - ACE_OS::printf ("\nexpiring timer %d at %u.%07.7u secs\n" - "\tthere was a %u.%07.7u secs delay\n", - this->id_, - current_time.sec (), - current_time.usec (), - delay.sec (), delay.usec ()); - - // Notice this delete is protected. - delete this; - return 0; -} - -// The handler was cancelled, so we must delete this. - -int -Handler::cancelled (void) -{ - delete this; - return 0; -} - -Input_Task::Input_Task (Thread_Timer_Queue *queue, - Thread_Timer_Queue_Test_Driver &timer_queue_driver) - : ACE_Task_Base (ACE_Thread_Manager::instance ()), - queue_ (queue), - usecs_ (ACE_ONE_SECOND_IN_USECS), - driver_ (timer_queue_driver) -{ -} - -// Svc method is called from the thread library to read input from the user. - -int -Input_Task::svc (void) -{ - for (;;) - // call back to the driver's implementation on how to read and parse input. - if (this->driver_.get_next_request () == -1) - break; - - // we are done. - this->queue_->deactivate (); - ACE_DEBUG ((LM_DEBUG, "terminating input thread\n")); - return 0; -} - -// schedule a new timer. This method will be called from inside the -// <Timer_Queue_Test_Driver> class. (see Command pattern) - -int -Input_Task::add_timer (void *argument) -{ - u_long useconds = *(int *)argument; - ACE_Time_Value interval (useconds / usecs_, useconds % usecs_); - ACE_Time_Value expire_at = ACE_OS::gettimeofday () + interval; - - Handler *h; - - ACE_NEW_RETURN (h, Handler (expire_at), -1); - - int id = queue_->schedule (h, 0, expire_at); - - if (id == -1) - ACE_ERROR_RETURN ((LM_ERROR, "schedule failed"), -1); - - // We store the id into the handler, this is only used to produce - // nicer messages. - // @@ Should this be something that a user can extract? - h->set_id (id); - - ACE_OS::printf ("scheduling timer %d\n", id); - return 0; -} - -// Cancel a timer. This method will be called from inside the -// <Timer_Queue_Test_Driver> class. (see Command pattern) - -int -Input_Task::cancel_timer (void *argument) -{ - return this->queue_->cancel (*(int *) argument); -} - -// Lists the timers in the queue. Ignores the argument. This method -// will be called from inside the <Timer_Queue_Test_Driver> class. -// (see Command pattern) - -int -Input_Task::list_timer (void *argument) -{ - // Macro to avoid "warning: unused parameter" type warning. - ACE_UNUSED_ARG (argument); - - // Dump the timer queue contents. - this->dump (); - - return 0; -} - -// Shutdown the timer queue. Return -1 indicates to the -// <Timer_Queue_Test_Driver> class that we are done. - -int -Input_Task::shutdown_timer (void *argument) -{ - // Macro to avoid "warning: unused parameter" type warning. - ACE_UNUSED_ARG (argument); - -#if !defined (ACE_LACKS_PTHREAD_CANCEL) - // Cancel the thread timer queue task "preemptively." - ACE_Thread::cancel (this->queue_->thr_id ()); -#else - // Cancel the thread timer queue task "voluntarily." - this->queue_->deactivate (); -#endif /* ACE_LACKS_PTHREAD_CANCEL */ - - // -1 indicates we are shutting down the application. - return -1; -} - -void -Input_Task::dump (void) -{ - ACE_GUARD (ACE_SYNCH_MUTEX, ace_mon, this->queue_->mutex ()); - - ACE_DEBUG ((LM_DEBUG, "begin dumping timer queue\n")); - - for (Timer_Heap_Iterator i (this->queue_->timer_queue ()); - i.item () != 0; - i.next ()) - i.item ()->dump (); - - ACE_DEBUG ((LM_DEBUG, "end dumping timer queue\n")); -} - -// constructor - -Thread_Timer_Queue_Test_Driver::Thread_Timer_Queue_Test_Driver (void) - : input_task_ (&timer_queue_, *this) -{ -} - -Thread_Timer_Queue_Test_Driver::~Thread_Timer_Queue_Test_Driver (void) -{ -} - -int -Thread_Timer_Queue_Test_Driver::run_test (void) -{ - this->init (); - return 0; -} - -int -Thread_Timer_Queue_Test_Driver::display_menu (void) -{ - static char menu[] = - "Usage:\n" - "1 <microseconds>: setups a new timer\n" - "2 <timerid>: removes a timer\n" - "3 : prints timer queue\n" - "4 : exit\n"; - - ACE_DEBUG ((LM_DEBUG, "%s", menu)); - - return 0; -} - -int -Thread_Timer_Queue_Test_Driver::init (void) -{ - typedef Command<Input_Task, Input_Task::ACTION> CMD; - - // initialize the <Command> objects with their corresponding - // methods from <Input_Task> - ACE_NEW_RETURN (schedule_cmd_, - CMD (input_task_, &Input_Task::add_timer), - -1); - - ACE_NEW_RETURN (cancel_cmd_, - CMD (input_task_, &Input_Task::cancel_timer), - -1); - - ACE_NEW_RETURN (list_cmd_, - CMD (input_task_, &Input_Task::list_timer), - -1); - - ACE_NEW_RETURN (shutdown_cmd_, - CMD (input_task_, &Input_Task::shutdown_timer), - -1); - - if (this->input_task_.activate () == -1) - ACE_ERROR_RETURN ((LM_ERROR, "cannot activate input task"), -1); - - if (this->timer_queue_.activate () == -1) - ACE_ERROR_RETURN ((LM_ERROR, "cannot activate timer queue"), -1); - - if (ACE_Thread_Manager::instance ()->wait () == -1) - ACE_ERROR_RETURN ((LM_ERROR, "wait on Thread_Manager failed"),-1); - - return 0; -} - -#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) -template class ACE_Thread_Timer_Queue_Adapter<Timer_Heap>; -template class Timer_Queue_Test_Driver<Thread_Timer_Queue, - Input_Task, - Input_Task::ACTION>; -template class Command<Input_Task, Input_Task::ACTION>; -#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) -#pragma instantiate ACE_Thread_Timer_Queue_Adapter<Timer_Heap> -#pragma instantiate Timer_Queue_Test_Driver<Thread_Timer_Queue, \ - Input_Task, \ - Input_Task::ACTION> -#pragma instantiate Command<Input_Task, Input_Task::ACTION> -#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ - -#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) -// These templates will specialized in libACE.* if the platforms does -// not define ACE_MT_SAFE. - -#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) -template class ACE_Thread_Condition<ACE_Thread_Mutex>; -template class ACE_Condition<ACE_Thread_Mutex>; -template class ACE_Event_Handler_Handle_Timeout_Upcall<ACE_Null_Mutex>; -template class ACE_Timer_Queue_T<ACE_Event_Handler *, ACE_Event_Handler_Handle_Timeout_Upcall<ACE_Null_Mutex>, ACE_Null_Mutex>; -template class ACE_Timer_Heap_T<ACE_Event_Handler *, ACE_Event_Handler_Handle_Timeout_Upcall<ACE_Null_Mutex>, ACE_Null_Mutex>; -template class ACE_Timer_Heap_Iterator_T<ACE_Event_Handler *, ACE_Event_Handler_Handle_Timeout_Upcall<ACE_Null_Mutex>, ACE_Null_Mutex>; -template class ACE_Timer_Queue_Iterator_T<ACE_Event_Handler *, ACE_Event_Handler_Handle_Timeout_Upcall<ACE_Null_Mutex>, ACE_Null_Mutex>; -#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) -#pragma instantiate ACE_Thread_Condition<ACE_Thread_Mutex> -#pragma instantiate ACE_Condition<ACE_Thread_Mutex> -#pragma instantiate ACE_Event_Handler_Handle_Timeout_Upcall<ACE_Null_Mutex> -#pragma instantiate ACE_Timer_Queue_T<ACE_Event_Handler *, ACE_Event_Handler_Handle_Timeout_Upcall<ACE_Null_Mutex>, ACE_Null_Mutex> -#pragma instantiate ACE_Timer_Heap_T<ACE_Event_Handler *, ACE_Event_Handler_Handle_Timeout_Upcall<ACE_Null_Mutex>, ACE_Null_Mutex> -#pragma instantiate ACE_Timer_Heap_Iterator_T<ACE_Event_Handler *, ACE_Event_Handler_Handle_Timeout_Upcall<ACE_Null_Mutex>, ACE_Null_Mutex> -#pragma instantiate ACE_Timer_Queue_Iterator_T<ACE_Event_Handler *, ACE_Event_Handler_Handle_Timeout_Upcall<ACE_Null_Mutex>, ACE_Null_Mutex> -#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ -#endif /* ACE_MT_SAFE */ |