diff options
Diffstat (limited to 'TAO/tests/RTScheduling/Thread_Cancel/test.cpp')
-rw-r--r-- | TAO/tests/RTScheduling/Thread_Cancel/test.cpp | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/TAO/tests/RTScheduling/Thread_Cancel/test.cpp b/TAO/tests/RTScheduling/Thread_Cancel/test.cpp new file mode 100644 index 00000000000..42a390c4b01 --- /dev/null +++ b/TAO/tests/RTScheduling/Thread_Cancel/test.cpp @@ -0,0 +1,79 @@ +// $Id$ + +#include "Thread_Task.h" +#include "ace/OS_NS_unistd.h" +#include "../Scheduler.h" +#include "tao/RTScheduling/RTScheduler_Manager.h" +#include "tao/ORB_Core.h" + +int +main (int argc, char* argv []) +{ + ACE_TRY_NEW_ENV + { + CORBA::ORB_var orb = + CORBA::ORB_init (argc, + argv, + "" + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + CORBA::Object_var manager_obj = orb->resolve_initial_references ("RTSchedulerManager" + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + TAO_RTScheduler_Manager_var manager = TAO_RTScheduler_Manager::_narrow (manager_obj.in () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + TAO_Scheduler scheduler (orb.in ()); + + manager->rtscheduler (&scheduler); + + Thread_Task task; + + task.activate_task (orb.in ()); + + ACE_DEBUG ((LM_DEBUG, + "Waiting for Threads to Activate...\n")); + ACE_OS::sleep (10); + ACE_DEBUG ((LM_DEBUG, + "Threads Activated\n")); + + + ACE_DEBUG ((LM_DEBUG, + "Cancelling Threads.....\n")); + + CORBA::Object_var current_obj = orb->resolve_initial_references ("RTScheduler_Current" + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + RTScheduling::Current_var current = RTScheduling::Current::_narrow (current_obj.in () + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + for (int i = 0; i < 4; i++) + { + RTScheduling::DistributableThread_var DT = current->lookup ((task.guids ())[i] + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + DT->cancel (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + } + + orb->run (); + + ACE_Thread_Manager::instance ()->wait (); + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, + "Caught exception:"); + return 1; + } + ACE_ENDTRY; + + return 0; +} + |