/* libzzthread
*
* This program is distributed under the GNU General Public License, version 2.
* A copy of this license is included with this source.
*
* Copyright 2000-2006, Toni Thomsson <toni@tonjac.org>
*/
#ifndef zz_win_thread_h
#define zz_win_thread_h
#include <windows.h>
#include <zz_win_exception.h>
// Description: Exitkod som talar om att tråden "dödats hårt"
#define ZZ_THREAD_FORCED_STOP 0xFFFFFFFF
/*
Description:
Basklass för en windows tråd
Remarks:
Subklassa och implementera OnStart(). Skapa ett objekt av din klass
och anropa Run() för att exekvera tråden, Run() anropar OnStart().
Tråden avslutas när OnStart() har exekverat färdigt eller när Stop()
anropas.
Author:
Toni Thomsson, toni@tonjac.org
Library:
libzzthread.lib
Platform:
win32
*/
class ZZ_API CzzWinThread
{
public:
/*
Description:
Skapar en tråd
Throws:
CzzException
*/
CzzWinThread();
CzzWinThread( LPTHREAD_START_ROUTINE startf );
// Remarks: Skapar en tråd med viss prioritet
CzzWinThread( int prio );
virtual ~CzzWinThread();
// Description: Exekvera tråden
// Throws: CzzException
void Run( void );
// Description: Kontrollerar om tråden exekverar
bool Running( void );
// Description: Stoppa tråden tillfälligt
void Suspend( void );
// Description: Starta tråden igen
void Resume( void );
/*
Description:
Stoppa tråden permanent
Remarks:
Tråden kan stoppas mjukt: den får göra klart det den håller på med
och själv avgöra när den skall avslutas.
Tråden kan stoppas hårt: avbryter oavsett vad tråden gör
*/
void Stop( bool hard, // IN, stoppflagga
DWORD exitcode // IN, exitkod
);
// Description: Exitkod
DWORD ExitCode( void ) { return m_ExitCode; };
// Description: Prioritet
void SetPrio( int prio );
/*
Description:
Anropas när tråden startar, jfr. ett vanligt programs main()
Remarks:
Skall implementeras i subklassen (överlagras) default
implementationen gör inte något mer än sätter m_Running = false
*/
virtual void OnStart( void ) { m_Running = false;
m_ExitCode = 0; };
protected:
// Description: Exitkod
DWORD m_ExitCode;
// Description: Flagga som talar om att tråden exekverat färdigt
bool m_Running;
// Description: Flagga som talar om att någon begärt att tråden skall stoppas
bool m_StopRequest;
unsigned long m_Id;
DWORD m_SuspendCount;
HANDLE m_Handle;
int m_Prio;
LPTHREAD_START_ROUTINE m_StartFunction;
private:
static unsigned int WINAPI Begin( LPVOID param );
void Cleanup(void);
};
#endif // zz_win_thread_h