00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00016 #ifndef _LOG4CPLUS_THREADS_HEADER_
00017 #define _LOG4CPLUS_THREADS_HEADER_
00018
00019 #include <log4cplus/config.h>
00020 #include <log4cplus/tstring.h>
00021 #include <log4cplus/helpers/sleep.h>
00022 #include <log4cplus/helpers/pointer.h>
00023 #include <memory>
00024
00025
00026 namespace log4cplus {
00027 namespace thread {
00028
00032 class LOG4CPLUS_EXPORT Guard {
00033 public:
00035 Guard(LOG4CPLUS_MUTEX_PTR_DECLARE mutex) {
00036 LOG4CPLUS_MUTEX_ASSIGN( _mutex, mutex );
00037 LOG4CPLUS_MUTEX_LOCK( _mutex );
00038 }
00039
00041 ~Guard() { LOG4CPLUS_MUTEX_UNLOCK( _mutex ); }
00042
00043 private:
00044 LOG4CPLUS_MUTEX_PTR_DECLARE _mutex;
00045
00046
00047 Guard(const Guard&);
00048 Guard& operator=(const Guard&);
00049 };
00050
00051 #ifndef LOG4CPLUS_SINGLE_THREADED
00052 #ifdef LOG4CPLUS_USE_PTHREADS
00053 void* threadStartFunc(void*);
00054 #elif defined(LOG4CPLUS_USE_WIN32_THREADS)
00055 DWORD WINAPI threadStartFunc(LPVOID arg);
00056 #endif
00057
00058 LOG4CPLUS_EXPORT void yield();
00059 LOG4CPLUS_EXPORT log4cplus::tstring getCurrentThreadName();
00060
00067 class LOG4CPLUS_EXPORT AbstractThread : public log4cplus::helpers::SharedObject {
00068 public:
00069 AbstractThread();
00070 bool isRunning() { return running; }
00071 LOG4CPLUS_THREAD_KEY_TYPE getThreadId() { return threadId; }
00072 virtual void start();
00073
00074 protected:
00075
00076 virtual ~AbstractThread();
00077 virtual void run() = 0;
00078
00079 private:
00080 bool running;
00081 LOG4CPLUS_THREAD_KEY_TYPE threadId;
00082
00083
00084 AbstractThread(const AbstractThread&);
00085 AbstractThread& operator=(const AbstractThread&);
00086
00087
00088 #ifdef LOG4CPLUS_USE_PTHREADS
00089 friend void* threadStartFunc(void*);
00090 #elif defined(LOG4CPLUS_USE_WIN32_THREADS)
00091 friend DWORD WINAPI threadStartFunc(LPVOID arg);
00092 #endif
00093
00094 };
00095 #endif // LOG4CPLUS_SINGLE_THREADED
00096
00097 }
00098 }
00099
00100
00101 #endif // _LOG4CPLUS_THREADS_HEADER_
00102