MFC AfxGetMainWnd() 전역함수 멀티 스레드 환경에서 사용시 에러 발생 해결 방법
- C++/MFC
- 2018. 5. 4. 10:53
MFC를 이용하여 소켓 프로그래밍 작업 중 AfxGetMainWnd() 함수를 사용하던 중 뜻하지 않은 에러를 마주하게 되었습니다. 웹 검색을 통해서 알아본 결과 다른 함수와는 달리 AfxGetMainWnd() 함수는 스레드와 관련이 있어서 주의하여야 한다고 합니다.
_AFXWIN_INLINE CWnd* AfxGetMainWnd()
{
CWinThread *pThread = AfxGetThread();
return pThread != NULL ? pThread -> GetMainWnd() : NULL;
}
위의 코드를 보시게 되면 내부에서 AfxGetThread() 함수를 사용하는 것을 볼 수가 있습니다.
즉, 현재 스레드의 GetMainWnd() 함수를 호출합니다.
이와 같은 사용은 다른 스레드에서 메인 윈도우의 핸들이 필요로 할 때 문제가 됩니다.
다른 스레드에서 AfxGetMainWnd() 함수를 호출하게 되면 메인 윈도우의 핸들을 얻을 수 없게 됩니다. 그러면서 오류가 발생합니다.
그래서 찾은 해결 방법은 아래와 같습니다.
위와 같이 AfxGetMainWin() 대신 멀티 스레드 환경에서는 AfxGetApp()->GetMainWnd(); 함수를 써 주었더니 오류 없이 프로그램이 제대로 실행되었습니다.
728x90
'C++ > MFC' 카테고리의 다른 글
MFC에서 스레드 선언 및 사용 법 (5) | 2018.05.17 |
---|---|
MFC 텍스트 관련함수 응용 (0) | 2018.05.14 |
MFC 사용자 정의 메시지 사용법 (0) | 2018.05.11 |
CDC클래스를 이용하여 출력하기 (0) | 2018.05.10 |
_T() 매크로 함수 (0) | 2018.05.10 |
이 글을 공유하기