CThread(void) :
m_bStop(false),
m_bRunning(false),
- m_bStopped(false) {}
+ m_bStopped(false),
+ m_thread(NULL) {}
virtual ~CThread(void)
{
StopThread(0);
+ void *retVal = NULL;
+ if (m_thread)
+ ThreadsWait(m_thread, &retVal);
}
static void *ThreadHandler(CThread *thread)
virtual bool CreateThread(bool bWait = true)
{
- bool bReturn(false);
- CLockObject lock(m_threadMutex);
- if (!IsRunning())
+ bool bReturn(false);
+ CLockObject lock(m_threadMutex);
+ if (!IsRunning())
+ {
+ m_bStop = false;
+ if (ThreadsCreate(m_thread, CThread::ThreadHandler, ((void*)static_cast<CThread *>(this))))
{
- m_bStop = false;
- if (ThreadsCreate(m_thread, CThread::ThreadHandler, ((void*)static_cast<CThread *>(this))))
- {
- if (bWait)
- m_threadCondition.Wait(m_threadMutex, m_bRunning);
- bReturn = true;
- }
+ if (bWait)
+ m_threadCondition.Wait(m_threadMutex, m_bRunning);
+ bReturn = true;
}
+ }
return bReturn;
}
protected:
void SetRunning(bool bSetTo);
+ CMutex m_threadMutex;
private:
bool m_bStop;
bool m_bRunning;
bool m_bStopped;
CCondition<bool> m_threadCondition;
- CMutex m_threadMutex;
thread_t m_thread;
};
};