공부는 역시 상황에 쫓겨서 하는게 가장 효과적이라는.. (..응? 좀 미리 미리 해놓지!!!!)
The CreateEvent function creates a named or an unnamed event object. : 이벤트를 만드는 함수랍니다.
HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPTSTR lpName);
Parameters
- lpEventAttributes : Ignored. Must be NULL. 무시하라는데여.
- bManualReset : a manual-reset 이냐 auto-reset event object 이냐를 결정한답니다.
- bInitialState : 이벤트 obj의 초기 상태를 결정. 그니까 FALSE를 해야 만들었다가 나중에 set signal 하죠.
- lpName : 이벤트 이름
- Return 값 : 핸들값이 나옵니다.
- bManualReset : a manual-reset 이냐 auto-reset event object 이냐를 결정한답니다.
그럼 이 함수의 용도와 용법을 알아보면..
CreateEvent(), SetEvnet(), ResetEvent()
1. 함수의 용도
WaitForSingleObject(), WaitForMultipleObjects() 등을 위한 Event Object를 만들고, 그것을 signal 상태 혹은 nonsignal 상태로 만들기 위해 사용됩니다.
2. 기본 용법
1) Event Object 를 생성한다.
HANDLE gv_hEvent;
int gv_operationType;
h = CreateEvent(NULL, TRUE, FALSE, NULL);
2) Thread Function을 만든다.
DWORD WINAPI MyThread(LPVOID lParam)
{
DWORD ret;
while (TRUE)
{
//gv_hEvent 가 set될 때까지 무한정 기다린다.
ret = WaiForSingleObject(gv_hEvent, INFINITE);
if(ret = WAIT_FAIL)
return 0;
}
else if ( ret = WAIT_ABANDONED) {
ResetEvent(gv_hEvent);
continue;
}
else if ( ret = WAIT_TIMEOUT) {
continue;
}
else {
if(gv_operationType==0)
return 0;
//필요한 작업을 하세요
ResetEvent(gv_hEvent);
}
}
}
3) UI 코드에서 Thread 가 작업을 하게 하고 싶다면
gv_operationType = 1;
SetEvent(gv_hEvent);
// --> 이 함수로 인해 gv_hEvent 가 signal 상태로 바뀌고, Thread의 WaitForSingleObject 가 return 된다.
** 참고로,
'MFC' 카테고리의 다른 글
타이틀바가 없을 때, 해당 윈도우 영역을 드래그할 경우, 윈도우 옮기기 (0) | 2013.07.09 |
---|---|
MFC - 콤보박스 (0) | 2012.02.02 |
MFC CFileDialog - 파일선택 다이얼로그 (0) | 2012.02.02 |
윈도우에서 쓰레드 사용 방법->절친 완전 설명 (0) | 2012.02.02 |
::CreateThread, _beginthread, _beginthreadex, ::AfxBeginThread 차이점 (0) | 2012.01.30 |