KS blog

killins.egloos.com

포토로그



Multi thread와 CWnd 클래스 by KillinS

일반적으로 VC에서 메인 프레임 클래스에 메시지를 보내기 위해 PostMessage 함수를 사용할 때

g_pMainFrm->PostMessage와 같은 형태로 호출한다.

헌데 이러한 방식이 멀티 쓰레드로 동작하는 프로그램에서는 문제가 발생할 수 있다.

MFC의 CWnd 계열 클래스의 객체는 기본적으로 여러개의 쓰레드에서 공유하지 않는것이 원칙이기 때문에

위와 같이 PostMessage를 호출하고자 하는 경우에는

프로그램을 초기화 할 때 g_pMainFrm->m_hWnd를 g_hMainFrm과 같은 전역 변수에 저장해두고,

메시지를 보낼 때 ::PostMessage(g_hMainFrm, WM_MESSAGE, A, B) 와 같이 쓰는 것이 좋다.

PostMessage 이외의 함수들도 멀티 쓰레드에서 사용할 때는 위와 같은 방식을 사용해야 한다.