MFC AfxGetMainWnd() 전역함수 멀티 스레드 환경에서 사용시 에러 발생 해결 방법

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

이 글을 공유하기

댓글

Designed by JB FACTORY