Application/MFC

[MFC] Thread 동기화 (CreateEvent)

devsalix 2023. 5. 3. 17:04
728x90

Thread 사용 시 함수의 중복된 실행을 막기 위해 사용하는 방법입니다

 

우선 헤더 파일에 이벤트 핸들을 추가합니다

 

HANDLE m_hEvent;

 

그 후 생성자 함수에서 이벤트를 생성합니다

 

CMyClass::CMyClass()
{
	m_hEvent = CreateEvent(NULL, FALSE, TRUE, NULL);
}

 

CreateEvent 함수의 인자값으로는

 

첫 번째 : 이벤트 속성 (기본 NULL 값)

두 번째 : 매뉴얼 설정 (자동 설정의 경우 FALSE)

세 번째 : 초기값 (초기 활성화 시 TRUE)

네 번째 : 이벤트명 ( 기본 NULL 값)

 

생성 후 함수에서 아래와 같이 작성하면 동기화가 완료됩니다

 

void CMyClass::MyFunc()
{
	WaitForSingleObject(m_hEvent, INFINITE);
	
	//처리할 코드
	
	SetEvent(m_hEvent);
}

 

위와 같이 작성하면 한 개의 스레드만 해당 함수에 접근 가능합니다

 

이후 마지막으로 소멸자에서 이벤트 변수를 정리해 주면 됩니다

 

CMyClass::~CMyClass()
{
	SetEvent(m_hEvent);
	CloseHandle(m_hEvent);
	m_hEvent = NULL;
}

 

 


제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀

 

 
728x90
반응형