summaryrefslogtreecommitdiff
path: root/examples/Threads
diff options
context:
space:
mode:
authornanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-03-17 23:19:04 +0000
committernanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-03-17 23:19:04 +0000
commit93c202f376cc005479db42e5e4f260238dd3fd79 (patch)
tree84e23cf8b52829dc9b5eb4fe81b8ebf5ce9c7071 /examples/Threads
parenta2bd3d311c29c9eec0dccd1c02d4aa4982cfc874 (diff)
downloadATCD-93c202f376cc005479db42e5e4f260238dd3fd79.tar.gz
Init. version.
Diffstat (limited to 'examples/Threads')
-rw-r--r--examples/Threads/task_five.cpp121
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;
+}