CriticalSection : 하나의 Process에서 여러개의 Thread의 상호배제 구현
선언 : CRITICAL_SECTION m_CrtSection;
초기 :
생성 : InitializeCriticalSectionAndSpinCount(&m_CrtSection, 2000);//Multi CPU를 지원 Spin Count를 추가 한다.
진입 : EnterCriticalSection(&m_CrtSection);
진출 : LeaveCriticalSection(&m_CrtSection);
소멸 : DeleteCriticalSection(&m_CrtSection);
Mutex : 이름을 지정하여 여러개의 Process의 Thread에서도 상호배제 가능.Mutex는 동기화 대상이 오직 하나뿐일 때
선언 : HANDLE m_hMutex;
초기 : m_hMutex=NULL;
생성 : m_hMutex=CreateMutex(NULL,FALSE,NULL); //OpenMutex()
진입 : WaitForSingleObject(m_hMutex,INFINITE);
진출 : ReleaseMutex(m_hMutex);
소멸 : if(m_hMutex !=NULL ) CloseHandle(m_hMutex);
Semaphore : 여러 Process의 한가지 자원에 접근 배제.Semaphore는 동기화 대상이 하나 이상일 때 사용
선언 : HANDLE m_hSemaphore;
초기 : m_hSemaphore=NULL;
생성 : m_hSemaphore= CreateSemaphore(
NULL, // default security attributes
3, // initial count. MAX_COUNT 10
3, // maximum count. MAX_COUNT 10
NULL); // unnamed semaphore
WaitForMultipleObjects(5, &aThread[0], TRUE, INFINITE);
진입 : dwWaitResult = WaitForSingleObject(
m_hSemaphore, // handle to semaphore
0L); // zero-second time-out interval
// Return value : 리턴값 ( dwWaitResult 에 저장되는 값 )
// WAIT_ABANDONED 0x00000080L
// WAIT_OBJECT_0 0X00000000L
// WAIT_TIMEOUT 0x00000102L
// WAIT_FAILED 0xFFFFFFFF(DWORD)
진출 : ReleaseSemaphore(m_hSemaphore, // handle to semaphore
1, // increase count by one
NULL) ) // not interested in previous count
소멸 : if(m_hSemaphore !=NULL ) CloseHandle(m_hSemaphore);
Event
선언 : HANDLE m_hEvent;
초기 : m_hEvent=NULL;
생성 : m_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); ResetEvent(m_hEvent);
진입 : WaitForSingleObject(pDlg->m_hEvent, INFINITE);
진출 : ResetEvent( hHandle );// 원하는 작업을 처리한다.
소멸 : if(hHandle !=NULL ) CloseHandle(hHandle);
이벤트 발생은 SetEvent(m_hEvent); //return value
WAIT_FAILED : fail, GetLastError로 원인을 알수가 있다 이경우 logic을 빠져나간다
WAIT_ABANDONED : 이 경우는 Event Object를 reset 하고 다시 WaitForSingleObject()를 호출한다
WAIT_OBJECT_0 : 기다리던 Event가 signal 된 경우
WATI_TIMEOUT : time-out 된 경우
'작업 > MFC' 카테고리의 다른 글
MFC에서 Excel 컨트롤 하기(1) (0) | 2020.01.23 |
---|---|
EXE 관리자 권한으로 System폴더의 ini접근을 위해 (0) | 2019.12.16 |
Opnecv를 Link한 MFC 프로그램 (Exe, Dll) (0) | 2019.11.21 |
VS2017 설치 프로그램 만들기 (0) | 2019.11.18 |
Dialog Base 종료키 막기(F1 Help Key 막기) (0) | 2019.11.01 |