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

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;
}
}