Listing 3: WinThread.cpp Win32 multithreading implementation
#include "WinThread.h"
DWORD __stdcall AWinThread::EntryPoint(void* p) {
AWinThread* ptr = (AWinThread*) p;
ptr->Run();
ptr->SetDeadState();
return 0;
}
AWinThread::AWinThread() {
DWORD ptr;
::InitializeCriticalSection(&mHandleLock);
mThread = ::CreateThread(NULL, 0, EntryPoint,
(LPVOID)this, CREATE_SUSPENDED, &ptr);
if (mThread == NULL) mState = DEAD;
else {
mState = RUN;
::ResumeThread(mThread);
}
}
AWinThread::~AWinThread() {
if (mState != DEAD) Kill(TRUE);
::DeleteCriticalSection(&mHandleLock);
}
void AWinThread::Kill(bool force) {
LockHandle();
if (mThread) {
if (force) {
::TerminateThread(mThread, 0);
mState = DEAD;
mThread = NULL;
}
else mState = TERMINATE;
}
UnlockHandle();
}
void AWinThread::CheckStatus() {
LockHandle();
if (mState == TERMINATE) {
mState = DEAD;
mThread = NULL;
UnlockHandle();
::ExitThread(0);
}
UnlockHandle();
}
//End of File