00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00023 #ifndef _LOG4CPLUS_THREADS_HEADER_
00024 #define _LOG4CPLUS_THREADS_HEADER_
00025
00026 #include "dcmtk/oflog/config.h"
00027 #include "dcmtk/oflog/tstring.h"
00028 #include "dcmtk/oflog/helpers/pointer.h"
00029
00030
00031 namespace log4cplus { namespace thread {
00032
00036 class Guard
00037 {
00038 public:
00040 Guard(LOG4CPLUS_MUTEX_PTR_DECLARE mutex)
00041 : _mutex (mutex)
00042 {
00043 LOG4CPLUS_MUTEX_LOCK( _mutex );
00044 }
00045
00047 ~Guard()
00048 {
00049 LOG4CPLUS_MUTEX_UNLOCK( _mutex );
00050 }
00051
00052 private:
00053 LOG4CPLUS_MUTEX_PTR_DECLARE _mutex;
00054
00055
00056 Guard(const Guard&);
00057 Guard& operator=(const Guard&);
00058 };
00059
00060
00061 #ifndef LOG4CPLUS_SINGLE_THREADED
00062
00063 LOG4CPLUS_EXPORT void blockAllSignals();
00064 LOG4CPLUS_EXPORT tstring getCurrentThreadName();
00065
00066
00067 struct ThreadStart;
00068
00069
00076 class LOG4CPLUS_EXPORT AbstractThread
00077 : public virtual log4cplus::helpers::SharedObject
00078 {
00079 public:
00080 AbstractThread();
00081 bool isRunning() const { return running; }
00082 LOG4CPLUS_THREAD_KEY_TYPE getThreadId() const;
00083 LOG4CPLUS_THREAD_HANDLE_TYPE getThreadHandle () const;
00084 virtual void start();
00085 void join () const;
00086
00087 protected:
00088
00089 virtual ~AbstractThread();
00090 virtual void run() = 0;
00091
00092 private:
00093 bool running;
00094
00095
00096 friend struct ThreadStart;
00097
00098 # ifdef LOG4CPLUS_USE_PTHREADS
00099 pthread_t handle;
00100
00101 # elif defined(LOG4CPLUS_USE_WIN32_THREADS)
00102 HANDLE handle;
00103 unsigned thread_id;
00104
00105 # endif
00106
00107
00108 AbstractThread(const AbstractThread&);
00109 AbstractThread& operator=(const AbstractThread&);
00110 };
00111
00112 typedef helpers::SharedObjectPtr<AbstractThread> AbstractThreadPtr;
00113
00114
00115 #endif // LOG4CPLUS_SINGLE_THREADED
00116
00117
00118 } }
00119
00120
00121 #endif // _LOG4CPLUS_THREADS_HEADER_
00122