00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _SOCKETS_Thread_H
00031 #define _SOCKETS_Thread_H
00032
00033 #include "sockets-config.h"
00034 #ifdef SOCKETS_NAMESPACE
00035 namespace SOCKETS_NAMESPACE {
00036 #endif
00037
00038 #ifdef _WIN32
00039
00040
00041
00042
00043 typedef unsigned threadfunc_t;
00044 typedef void * threadparam_t;
00045 #define STDPREFIX __stdcall
00046 #else
00047 #include <pthread.h>
00048
00049 typedef void * threadfunc_t;
00050 typedef void * threadparam_t;
00051 #define STDPREFIX
00052 #endif
00053
00061 class Thread
00062 {
00063 public:
00064 Thread(bool release = true);
00065 virtual ~Thread();
00066
00067 static threadfunc_t STDPREFIX StartThread(threadparam_t);
00068
00069 virtual void Run() = 0;
00070
00071 bool IsRunning();
00072 void SetRunning(bool x);
00073 bool IsReleased();
00074 void SetRelease(bool x);
00075 bool DeleteOnExit();
00076 void SetDeleteOnExit(bool x = true);
00077 bool IsDestructor();
00078
00079 private:
00080 Thread(const Thread& ) {}
00081 Thread& operator=(const Thread& ) { return *this; }
00082 #ifdef _WIN32
00083 HANDLE m_thread;
00084 unsigned m_dwThreadId;
00085 #else
00086 pthread_t m_thread;
00087 #endif
00088 bool m_running;
00089 bool m_release;
00090 bool m_b_delete_on_exit;
00091 bool m_b_destructor;
00092 };
00093
00094
00095 #ifdef SOCKETS_NAMESPACE
00096 }
00097 #endif
00098
00099 #endif // _SOCKETS_Thread_H