49 lines
741 B
C++
49 lines
741 B
C++
|
#include "IEvent.h"
|
||
|
|
||
|
IEvent::IEvent()
|
||
|
{
|
||
|
theEvent = CreateEvent(NULL, true, true, NULL);
|
||
|
ASSERT(theEvent);
|
||
|
|
||
|
blockCount.Set(0);
|
||
|
}
|
||
|
|
||
|
IEvent::~IEvent()
|
||
|
{
|
||
|
CloseHandle(theEvent);
|
||
|
}
|
||
|
|
||
|
bool IEvent::Block(void)
|
||
|
{
|
||
|
if(blockCount.Increment() == 1)
|
||
|
return (ResetEvent(theEvent) != 0);
|
||
|
else
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
bool IEvent::UnBlock(void)
|
||
|
{
|
||
|
if(blockCount.Decrement() == 0)
|
||
|
return (SetEvent(theEvent) != 0);
|
||
|
else
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
bool IEvent::Wait(UInt32 timeout)
|
||
|
{
|
||
|
switch(WaitForSingleObject(theEvent, timeout))
|
||
|
{
|
||
|
case WAIT_ABANDONED:
|
||
|
HALT("IEvent::Wait: got abandoned event");
|
||
|
return false;
|
||
|
|
||
|
case WAIT_OBJECT_0:
|
||
|
return true;
|
||
|
|
||
|
default:
|
||
|
case WAIT_TIMEOUT:
|
||
|
gLog.FormattedMessage("IEvent::Wait: timeout");
|
||
|
return false;
|
||
|
}
|
||
|
}
|