win/zz_win_thread.h

Go to the documentation of this file.
00001 /* libzzthread
00002  *
00003  * This program is distributed under the GNU General Public License, version 2.
00004  * A copy of this license is included with this source.
00005  *
00006  * Copyright 2000-2006, Toni Thomsson <toni@tonjac.org> 
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 // Description: Exitkod som talar om att tråden "dödats hårt"
00016 #define ZZ_THREAD_FORCED_STOP   0xFFFFFFFF
00017 
00018 /*
00019         Description:
00020         Basklass för en windows tråd
00021 
00022         Remarks:
00023         Subklassa och implementera OnStart(). Skapa ett objekt av din klass
00024         och anropa Run() för att exekvera tråden, Run() anropar OnStart().
00025         Tråden avslutas när OnStart() har exekverat färdigt eller när Stop()
00026         anropas.
00027 
00028         Author: 
00029         Toni Thomsson, toni@tonjac.org
00030 
00031         Library:
00032         libzzthread.lib
00033 
00034         Platform:
00035         win32
00036 */
00037 class ZZ_API CzzWinThread
00038 {
00039 public:
00040 
00041         /* 
00042                 Description:
00043                 Skapar en tråd
00044 
00045                 Throws:
00046                 CzzException
00047         */
00048         CzzWinThread();
00049 
00050     CzzWinThread( LPTHREAD_START_ROUTINE startf );
00051     
00052         // Remarks: Skapar en tråd med viss prioritet
00053         CzzWinThread( int prio );
00054 
00055         virtual ~CzzWinThread();
00056 
00057         // Description: Exekvera tråden
00058         // Throws: CzzException
00059         void Run( void );
00060 
00061         // Description: Kontrollerar om tråden exekverar
00062         bool Running( void ) { return m_Running; };
00063 
00064         // Description: Stoppa tråden tillfälligt
00065         void Suspend( void );
00066 
00067         // Description: Starta tråden igen
00068         void Resume( void );
00069 
00070         /* 
00071                 Description: 
00072                 Stoppa tråden permanent
00073 
00074                 Remarks:
00075                 Tråden kan stoppas mjukt: den får göra klart det den håller på med
00076                 och själv avgöra när den skall avslutas.
00077                 Tråden kan stoppas hårt: avbryter oavsett vad tråden gör
00078         */
00079         void Stop( bool hard,           // IN, stoppflagga
00080                                 DWORD exitcode  // IN, exitkod
00081                                 );
00082 
00083         // Description: Exitkod
00084         DWORD ExitCode( void ) { return m_ExitCode; };
00085 
00086         // Description: Prioritet
00087         void SetPrio( int prio );
00088                 
00089         /*
00090                 Description:
00091                 Anropas när tråden startar, jfr. ett vanligt programs main()
00092 
00093                 Remarks:
00094                 Skall implementeras i subklassen (överlagras) default
00095                 implementationen gör inte något mer än sätter m_Running = false
00096         */
00097         virtual void OnStart( void ) { m_Running = false;
00098                                                                         m_ExitCode = 0; };
00099         
00100 protected:
00101 
00102         // Description: Exitkod
00103         DWORD m_ExitCode;
00104 
00105         // Description: Flagga som talar om att tråden exekverat färdigt
00106         bool m_Running;
00107 
00108         // Description: Flagga som talar om att någon begärt att tråden skall stoppas
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

Generated on Thu Sep 21 21:45:42 2006 for tonjac.org MINI/C++ library by  doxygen 1.4.6-NO