tge/engine/platformWin32/winSemaphore.cc
2017-04-17 06:17:10 -06:00

43 lines
1.2 KiB
C++
Executable File

//-----------------------------------------------------------------------------
// Torque Game Engine
// Copyright (C) GarageGames.com, Inc.
//-----------------------------------------------------------------------------
#include "platformWin32/platformWin32.h"
#include "platform/platformSemaphore.h"
void * Semaphore::createSemaphore(U32 initialCount)
{
HANDLE * semaphore = new HANDLE;
*semaphore = CreateSemaphore(0, initialCount, S32_MAX, 0);
return(semaphore);
}
void Semaphore::destroySemaphore(void * semaphore)
{
AssertFatal(semaphore, "Semaphore::destroySemaphore: invalid semaphore");
CloseHandle(*(HANDLE*)semaphore);
delete semaphore;
}
bool Semaphore::acquireSemaphore(void * semaphore, bool block)
{
AssertFatal(semaphore, "Semaphore::acquireSemaphore: invalid semaphore");
if(block)
{
WaitForSingleObject(*(HANDLE*)semaphore, INFINITE);
return(true);
}
else
{
DWORD result = WaitForSingleObject(*(HANDLE*)semaphore, 0);
return(result == WAIT_OBJECT_0);
}
}
void Semaphore::releaseSemaphore(void * semaphore)
{
AssertFatal(semaphore, "Semaphore::releaseSemaphore: invalid semaphore");
ReleaseSemaphore(*(HANDLE*)semaphore, 1, 0);
}