mirror of
https://github.com/holub/mame
synced 2025-06-03 19:36:26 +03:00
48 lines
832 B
C++
48 lines
832 B
C++
// 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 THREAD_FUNC_RET_ZERO;
|
|
t->Execute();
|
|
t->FinishedEvent.Set();
|
|
}
|
|
}
|
|
|
|
WRes CVirtThread::Create()
|
|
{
|
|
RINOK_WRes(StartEvent.CreateIfNotCreated_Reset())
|
|
RINOK_WRes(FinishedEvent.CreateIfNotCreated_Reset())
|
|
// StartEvent.Reset();
|
|
// FinishedEvent.Reset();
|
|
Exit = false;
|
|
if (Thread.IsCreated())
|
|
return S_OK;
|
|
return Thread.Create(CoderThread, this);
|
|
}
|
|
|
|
WRes CVirtThread::Start()
|
|
{
|
|
Exit = false;
|
|
return StartEvent.Set();
|
|
}
|
|
|
|
void CVirtThread::WaitThreadFinish()
|
|
{
|
|
Exit = true;
|
|
if (StartEvent.IsCreated())
|
|
StartEvent.Set();
|
|
if (Thread.IsCreated())
|
|
{
|
|
Thread.Wait_Close();
|
|
}
|
|
}
|