Source code
Revision control
Copy as Markdown
Other Tools
// VirtThread.cpp↩
↩
#include "StdAfx.h"↩
↩
#include "VirtThread.h"↩
↩
static THREAD_FUNC_DECL CoderThread(void *p)↩
{↩
for (;;)↩
{↩
CVirtThread *t = (CVirtThread *)p;↩
t->StartEvent.Lock();↩
if (t->Exit)↩
return 0;↩
t->Execute();↩
t->FinishedEvent.Set();↩
}↩
}↩
↩
WRes CVirtThread::Create()↩
{↩
RINOK(StartEvent.CreateIfNotCreated());↩
RINOK(FinishedEvent.CreateIfNotCreated());↩
StartEvent.Reset();↩
FinishedEvent.Reset();↩
Exit = false;↩
if (Thread.IsCreated())↩
return S_OK;↩
return Thread.Create(CoderThread, this);↩
}↩
↩
void CVirtThread::Start()↩
{↩
Exit = false;↩
StartEvent.Set();↩
}↩
↩
void CVirtThread::WaitThreadFinish()↩
{↩
Exit = true;↩
if (StartEvent.IsCreated())↩
StartEvent.Set();↩
if (Thread.IsCreated())↩
{↩
Thread.Wait();↩
Thread.Close();↩
}↩
}↩