diff options
author | nanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1998-03-17 23:19:04 +0000 |
---|---|---|
committer | nanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1998-03-17 23:19:04 +0000 |
commit | 93c202f376cc005479db42e5e4f260238dd3fd79 (patch) | |
tree | 84e23cf8b52829dc9b5eb4fe81b8ebf5ce9c7071 /examples/Threads | |
parent | a2bd3d311c29c9eec0dccd1c02d4aa4982cfc874 (diff) | |
download | ATCD-93c202f376cc005479db42e5e4f260238dd3fd79.tar.gz |
Init. version.
Diffstat (limited to 'examples/Threads')
-rw-r--r-- | examples/Threads/task_five.cpp | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/examples/Threads/task_five.cpp b/examples/Threads/task_five.cpp new file mode 100644 index 00000000000..996932bec0c --- /dev/null +++ b/examples/Threads/task_five.cpp @@ -0,0 +1,121 @@ +// $Id$ + +// Stress testing tread creation using ACE_Task. + +// Author: Detlef Becker <Detlef.Becker@med.siemens.de> + +#include "ace/Service_Config.h" +#include "ace/Thread_Manager.h" +#include "ace/Task.h" + +class TestTask : public ACE_Task<ACE_MT_SYNCH> +{ +public: + TestTask(ACE_Thread_Manager *thrmgr = ACE_Service_Config::thr_mgr ()); + ~TestTask() {}; + + int open (void * = 0); + int svc (void); + int close (u_long); + int shutdownRq(void); + int synch(); +}; + +TestTask::TestTask(ACE_Thread_Manager *thrmgr) +: ACE_Task<ACE_MT_SYNCH> (thrmgr) +{ +} + +int +TestTask::open (void *) +{ + return this->activate (); +} + +int +TestTask::svc (void) +{ + while (!thr_mgr_->testcancel(ACE_OS::thr_self())) + { + ::Sleep(350); + } + return 0; +} + +int +TestTask::close (u_long) +{ + return 0; +} + +int +TestTask::shutdownRq (void) +{ + return thr_mgr_->cancel_grp(grp_id_); +} + +int +TestTask::synch (void) +{ + return thr_mgr_->wait_grp(grp_id_); +} + +int +main (int, char *[]) +{ + const int numTasks = 1000; + unsigned int loopCnt = 0; + unsigned int errCnt = 0; + + ACE_Thread_Manager *thr_mgr = ACE_Service_Config::thr_mgr (); + + TestTask *TaskArrPtr; + + while (1) + { + TaskArrPtr = new TestTask[numTasks]; + + cout << "Opening Tasks!" << loopCnt + << " " << errCnt << endl; + + for (int ii =0; ii < numTasks; ii++) + { + TaskArrPtr[ii].open(); + } + + ACE_OS::sleep (1); + + cout << "Cancelling Tasks!" << loopCnt + << " " << errCnt << endl; + + for (ii = 0; ii < numTasks; ii++) + { + TaskArrPtr[ii].shutdownRq(); + } + + cout << "Synching Tasks!" << loopCnt + << " " << errCnt << endl; + + for (ii = 0; ii < numTasks; ii++) + { + if (-1 == TaskArrPtr[ii].synch()) + { + cout << "Error in synch! " << loopCnt + << " " << errCnt << " " << ii << endl; + errCnt++; + } + } + + cout << "thr_mgr->wait ();!" << loopCnt + << " " << errCnt << endl; + + thr_mgr->wait (); + + delete [] TaskArrPtr; + + loopCnt++; + + } + + return 0; +} |