00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef zz_win_thread_h
00010 #define zz_win_thread_h
00011
00012 #include <windows.h>
00013 #include <zz_win_exception.h>
00014
00015
00016 #define ZZ_THREAD_FORCED_STOP 0xFFFFFFFF
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 class ZZ_API CzzWinThread
00038 {
00039 public:
00040
00041
00042
00043
00044
00045
00046
00047
00048 CzzWinThread();
00049
00050 CzzWinThread( LPTHREAD_START_ROUTINE startf );
00051
00052
00053 CzzWinThread( int prio );
00054
00055 virtual ~CzzWinThread();
00056
00057
00058
00059 void Run( void );
00060
00061
00062 bool Running( void ) { return m_Running; };
00063
00064
00065 void Suspend( void );
00066
00067
00068 void Resume( void );
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079 void Stop( bool hard,
00080 DWORD exitcode
00081 );
00082
00083
00084 DWORD ExitCode( void ) { return m_ExitCode; };
00085
00086
00087 void SetPrio( int prio );
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097 virtual void OnStart( void ) { m_Running = false;
00098 m_ExitCode = 0; };
00099
00100 protected:
00101
00102
00103 DWORD m_ExitCode;
00104
00105
00106 bool m_Running;
00107
00108
00109 bool m_StopRequest;
00110
00111 unsigned long m_Id;
00112 DWORD m_SuspendCount;
00113 HANDLE m_Handle;
00114 int m_Prio;
00115
00116 LPTHREAD_START_ROUTINE m_StartFunction;
00117
00118 private:
00119 static unsigned int WINAPI Begin( LPVOID param );
00120
00121 void Cleanup(void);
00122 };
00123
00124 #endif // zz_win_thread_h