Vault
4.1
|
00001 /* 00002 Copyright c1997-2014 Trygve Isaacson. All rights reserved. 00003 This file is part of the Code Vault version 4.1 00004 http://www.bombaydigital.com/ 00005 License: MIT. See LICENSE.md in the Vault top level directory. 00006 */ 00007 00010 #include "vsemaphore.h" 00011 00012 #include "vexception.h" 00013 #include "vmutex.h" 00014 00015 VSemaphore::VSemaphore() 00016 : mSemaphore() 00017 { 00018 00019 if (! VSemaphore::semaphoreInit(&mSemaphore)) { 00020 throw VStackTraceException("VSemaphore::VSemaphore unable to initialize semaphore."); 00021 } 00022 } 00023 00024 VSemaphore::~VSemaphore() { 00025 (void) VSemaphore::semaphoreDestroy(&mSemaphore); 00026 } 00027 00028 void VSemaphore::wait(VMutex* ownedMutex, const VDuration& timeoutInterval) { 00029 if (! VSemaphore::semaphoreWait(&mSemaphore, ownedMutex->getMutex(), timeoutInterval)) { 00030 throw VStackTraceException("VSemaphore::wait unable to wait on semaphore."); 00031 } 00032 } 00033 00034 void VSemaphore::signal() { 00035 if (! VSemaphore::semaphoreSignal(&mSemaphore)) { 00036 throw VStackTraceException("VSemaphore::signal unable to signal semaphore."); 00037 } 00038 } 00039