Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

/ps/src/dsc/co/mw/mwfwk/cmwfwThread.cc

Go to the documentation of this file.
00001 #ifdef CMWFW_WINDOWSNT
00002 #include <iostream>
00003 using namespace std;
00004 #endif
00005 #include "cmwfwThread.h"
00006 
00007 
00008 
00009 
00010 #define FILE "source file:cmwfwThread.cc"
00011 #define ID "Contact Steen JENSEN, PS/CO"
00012 #define PROGRAM "Middleware server framework"
00013 #define T(a,b,c,d,e) TRACE(a,"%s(%s): %s %s %s %s\n",myname,FILE,b,c,d,e)
00014 #define E(a,b,c,d) ERROR("%s:%s(%s):ERROR: %s %s %s %s - %s\n",PROGRAM,myname,FILE,a,b,c,d,ID)
00015 //T(CMWFW_TRACE_,"","","","");
00016 //E("","","","");
00017 
00018 
00019 
00020 
00026 cmwfwThread::cmwfwThread(void*(*f)(void*),void* p){
00027   char* myname = "cmwfwThread::cmwfwThread";
00028   T(CMWFW_TRACE_CALLS,"Entering","","","");
00029 
00030   thr_routine = f;
00031   thr_param.param = p;
00032   thr_param.stop_flag = false;
00033   thr_param.thr_exit_status = 0;
00034 
00035   JTCInitialize init;
00036   theThread = new cmwfwActualThread_JTC(f,(void*)&thr_param);
00037   if(!theThread)heaperr(33);
00038 
00039   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00040   running = false;
00041 };
00042 
00043 
00049 cmwfwThread::~cmwfwThread(){
00050   char* myname = "cmwfwThread::~cmwfwThread";
00051   T(CMWFW_TRACE_CALLS,"Entering","","","");
00052 
00053   if(running){
00054 //      theThread->stop();              // note: Threads on Win32 does not support stop()!
00055         theThread->join();              // necessary to be sure?
00056         running = false;
00057   };
00058 
00059   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00060 };
00061 
00062 
00068 bool cmwfwThread::run(){
00069   char* myname = "cmwfwThread::run";
00070   T(CMWFW_TRACE_CALLS,"Entering","","","");
00071   
00072   if(!running){
00073           running = true;
00074           theThread -> start();
00075   };
00076 
00077   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00078   return running;
00079 };
00080 
00081 
00087 void* cmwfwThread::requestStop(){
00088   char* myname = "cmwfwThread::requestStop";
00089   T(CMWFW_TRACE_CALLS,"Entering","","","");
00090 
00091   thr_param.stop_flag = true;
00092   theThread->join();
00093 
00094   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00095   return thr_param.thr_exit_status;
00096 };
00097 
00098 
00104 bool cmwfwThread::isRunning(){
00105   char* myname = "cmwfwThread::isRunning";
00106   T(CMWFW_TRACE_CALLS,"Entering","","","");
00107 
00108   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00109   return running;
00110 };
00111 
00112 
00113 
00122 void cmwfwThread::heaperr(int line){
00123   char* myname = "cmwfwThread";
00124   T(CMWFW_TRACE_CALLS,"Entering","","","");
00125 
00126   char l[30];
00127   itoa(line,l);
00128   E("Out of heap in line ",l,"","");
00129   T(CMWFW_TRACE_CALLS,"Exiting due to heap allocation error","","","");
00130   throw cmwfwInternalError(FILE,line,"Out of heap memory");
00131   exit(-1);
00132 };
00133 
00134 
00135 
00140 cmwfwActualThread_JTC::cmwfwActualThread_JTC(void*(*f)(void*),void* p){
00141   char* myname = "cmwfwActualThread_JTC::cmwfwActualThread_JTC";
00142   T(CMWFW_TRACE_CALLS,"Entering","","","");
00143 
00144   thr_routine = f;
00145   parameter = p;
00146 
00147   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00148 };
00149 
00150 
00155 void cmwfwActualThread_JTC::run(){
00156   char* myname = "cmwfwActualThread_JTC::run";
00157   T(CMWFW_TRACE_CALLS,"Entering","","","");
00158 
00159   (*thr_routine)(parameter);
00160 
00161   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00162 };

Generated at Thu May 10 11:29:00 2001 for C.E.R.N.-PSControlsMiddlewareFramework by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001