어떤 어플리케이션을 한번에 3개까지만 실행 하게하기(WaitForSingleObject)
어떤 어플리케이션을 한번에 3개까지만 실행 하게하기
#include <stdio.h>
#include <windows.h>
#define SEMAPHORE_NAME "Semaphore Sample"
// 어플리케이션을 한번에 3개까지만 실행 하게
int main()
{
HANDLE hSemaphore;
DWORD dwResult;
// 세마포어 만들기
hSemaphore = CreateSemaphore(NULL, 3, 3, (LPCSTR)SEMAPHORE_NAME);
// 지정한 오브젝트가 시그널 상태가 되
dwResult = WaitForSingleObject(hSemaphore, // 세마포어 오브젝트 핸들
0); // 타임아웃시간
// 만들어진 세마포어 확인
if(dwResult != WAIT_OBJECT_0) {
printf("벌써 3개 실행됬어 %d\n", dwResult);
Sleep(1000);
} else {
// 처리
printf("처리시작 %d\n", dwResult);
Sleep(10000);
printf("처리종료 %d\n", dwResult);
// 개방
ReleaseSemaphore(hSemaphore, 1, NULL);
}
CloseHandle(hSemaphore);
return(0);
}
vs2005용 예제 파일
프로그램을 빌드해서 실행하면 처리시작이 표시되는 프로그램은 항상 세개이다.