BOOL ReleaseSemaphore( HANDLE hSemaphore, LONG ReleaseCount, LPLONG PrevCount);
セマフォオブジェクトの内部カウンタを増加する。
内部カウンタは、カウンタの最大値を超えて増加させることはできない。最大値を超えて増加させようとした場合、エラーが発生する。
引数の意味は、次の通り。
hSemaphore | (IN) | 内部カウンタを増加させるセマフォオブジェクトを示すハンドル |
ReleaseCount | (IN) | 増加数。 |
PrevCount | (OUT) | 増加させる前の値を格納する変数へのポインタ。NULLが指定された場合、この引数は無視される。 |
戻り値は、内部カウンタの増加に成功したか否かを表す真偽値である。
#define SEMAPHORE_NAME "Test Semaphore Object" /* アプリケーションを1度に3つまでしか実行できないようにする */ int main() { HANDLE hSemaphore; DWORD result; /* セマフォオブジェクトの作成/取得 */ hSemaphore = CreateSemaphore(NULL, 3, 3, SEMAPHORE_NAME); result = WaitForSingleObject(hSemaphore, 0); /* すでに3つ開いているかどうか判定 */ if(result != WAIT_OBJECT_0) { printf("既に3つ開いている\n"); } else { /* 処理 */ printf("処理開始\n"); Sleep(10000); printf("処理終了\n"); /* 解放 */ ReleaseSemaphore(hSemaphore, 1, NULL); } CloseHandle(hSemaphore); return(0); }