출저 : http://blog.daum.net/aswip/6297610
출저 : http://newly3.tistory.com/7
다음 내용은 윈도우 환경에서 EVENT 객체를 사용하는 방법에 대해서 설명하고 있습니다.
일반적으로 이벤트 객체는 서로 다른 쓰레드 환경에서 공유자원의 무결성을 효과적으로 제어하기 위해서
사용되어집니다. 물론 그 밖의 쓰임새도 있겠죠.
본 예제에서는 이벤트 객체를 시그널 된 상태일 때와 그렇지 않을 때를 비교해서 설명하고 있습니다.
내용이 어렵지 않으니, 실행해 보시면 금방 이해가 가실거라는 생각이 드네요.
#include <time.h>
#include <stdio.h>
#include <windows.h>
#define MY_WAIT_TIME 5000
void EventWithSignal()
{
DWORD dwRet = 0;
HANDLE hEvent = NULL;
time_t tStart = time(0);
hEvent = CreateEvent(NULL, TRUE, FALSE, "YourEventName");
printf("Event with signal\n");
// 이벤트 객체를 signaled 상태로 만듬
SetEvent(hEvent);
printf("Sst event\n");
// event가 발생 할 때 까지 5초 동안 대기
dwRet = WaitForSingleObject(hEvent, MY_WAIT_TIME);
if ( dwRet == WAIT_OBJECT_0 )
printf("event is signaled.\n");
CloseHandle(hEvent);
printf("elapsed time %d sec.\n", time(0) - tStart);
printf("\n");
}
void EventWithNonSignal()
{
DWORD dwRet = 0;
HANDLE hEvent = NULL;
time_t tStart = time(0);
hEvent = CreateEvent(NULL, TRUE, FALSE, "YourEventName");
printf("Event with non-signal\n");
// 이벤트 객체를 non-signaled 상태로 만듬
ResetEvent(hEvent);
printf("Rest event\n");
// event가 발생 할 때 까지 5초 동안 대기
dwRet = WaitForSingleObject(hEvent, MY_WAIT_TIME);
if ( dwRet == WAIT_TIMEOUT )
printf("event timeout..\n");
CloseHandle(hEvent);
printf("elapsed time %d sec.\n", time(0) - tStart);
printf("\n");
}
int main(int argc, char **argv)
{
EventWithSignal();
EventWithNonSignal();
return 0;
}
CreateEvent
: 이벤트를 생성. 생성시 이벤트를 non signal / signal 상태로 생성 가능하다.
(생성되지 않은 이벤트 생성/생성되어 있는거라면 HANDLE리턴)
OpenEvent
: 생성된 Event를 Open
(생성되지 않은 이벤트라면 invalid_handle같은 에러 리턴)
SetEvent
: 이벤트를 전송. non signal 상태를 signal 상태로 변환한다.
(wait하는 thread가 없어도 상태가 저장되어 wait하는 thread는 signal을 받을수 있다.)
PulseEvent
: 이벤트를 전송. 현재 대기하는 thread만 signal을 보내고 signal을 unset한다.
(auto일 경우 하나만, manual일 경우 전체)
ResetEvent
: 이벤트를 reset
(SetEvent에 의해 전송된 이벤트가 메뉴얼 reset설정되어 있는 경우 ResetEvent를 해야 함)
'[ Programing ] > Server' 카테고리의 다른 글
IOCP (0) | 2013.08.22 |
---|---|
뮤텍스와 세마포어 (0) | 2013.08.22 |
Shared memory (0) | 2010.07.23 |
메모리 락 (0) | 2010.06.29 |
POSIX 정규 표현식 (0) | 2010.06.29 |