2009년 07월 29일
Multi thread와 CWnd 클래스
일반적으로 VC에서 메인 프레임 클래스에 메시지를 보내기 위해 PostMessage 함수를 사용할 때
g_pMainFrm->PostMessage와 같은 형태로 호출한다.
헌데 이러한 방식이 멀티 쓰레드로 동작하는 프로그램에서는 문제가 발생할 수 있다.
MFC의 CWnd 계열 클래스의 객체는 기본적으로 여러개의 쓰레드에서 공유하지 않는것이 원칙이기 때문에
위와 같이 PostMessage를 호출하고자 하는 경우에는
프로그램을 초기화 할 때 g_pMainFrm->m_hWnd를 g_hMainFrm과 같은 전역 변수에 저장해두고,
메시지를 보낼 때 ::PostMessage(g_hMainFrm, WM_MESSAGE, A, B) 와 같이 쓰는 것이 좋다.
PostMessage 이외의 함수들도 멀티 쓰레드에서 사용할 때는 위와 같은 방식을 사용해야 한다.
g_pMainFrm->PostMessage와 같은 형태로 호출한다.
헌데 이러한 방식이 멀티 쓰레드로 동작하는 프로그램에서는 문제가 발생할 수 있다.
MFC의 CWnd 계열 클래스의 객체는 기본적으로 여러개의 쓰레드에서 공유하지 않는것이 원칙이기 때문에
위와 같이 PostMessage를 호출하고자 하는 경우에는
프로그램을 초기화 할 때 g_pMainFrm->m_hWnd를 g_hMainFrm과 같은 전역 변수에 저장해두고,
메시지를 보낼 때 ::PostMessage(g_hMainFrm, WM_MESSAGE, A, B) 와 같이 쓰는 것이 좋다.
PostMessage 이외의 함수들도 멀티 쓰레드에서 사용할 때는 위와 같은 방식을 사용해야 한다.
# by | 2009/07/29 10:29 | MFC | 트랙백





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]