enderalse/source/fs.dll/common/IThread.cpp

66 lines
896 B
C++

#include "IThread.h"
IThread::IThread()
{
mainProc = NULL;
mainProcParam = NULL;
stopRequested = false;
isRunning = false;
theThread = NULL;
threadID = 0;
}
IThread::~IThread()
{
ForceStop();
if(theThread)
{
CloseHandle(theThread);
}
}
void IThread::Start(MainProcPtr proc, void * procParam)
{
if(!isRunning)
{
isRunning = true;
stopRequested = false;
mainProc = proc;
mainProcParam = procParam;
theThread = CreateThread(NULL, 0, _ThreadProc, static_cast<IThread *>(this), 0, &threadID);
}
}
void IThread::Stop(void)
{
if(isRunning)
{
stopRequested = true;
}
}
void IThread::ForceStop(void)
{
if(isRunning)
{
TerminateThread(theThread, 0);
isRunning = false;
}
}
UInt32 IThread::_ThreadProc(void * param)
{
IThread * _this = (IThread *)param;
if(_this->mainProc)
_this->mainProc(_this->mainProcParam);
_this->isRunning = false;
return 0;
}