오답노트

CWinThread 프로그램 종료 시 스레드 종료 안됨 본문

C,C++/MFC

CWinThread 프로그램 종료 시 스레드 종료 안됨

권멋져 2022. 3. 21. 09:58

1. Dlg 포인터를 가져다가 UI 를 사용하던것

   서로 모순되는 상황이라 데드락이 걸린 상태

   쓰레드는 UI를 사용할려고 하고 Dlg에서는 종료하라고 flag를 내린 상태
   하지만 Dlg가 사라지면서 UI를 사용하지 못하니 Thread가 제대로 해제 되지 못했다.

 

2. PumpMessage 로 PostThreadMessage 가 호출될 때까지 계속 기다린다.

   

   CWinThread에 flag를 내린 후 아래 코드로 PostThreadMessage 가 호출 될 때까지 계속 기다린다

   (개념이 맞는지 잘 모르겠다.. 호출 될때까지 기다리는건지 아니면 호출을 계속 시키는건지.. 느낌상 더 이상 호출될 메세지가 없을때까지 보는거 같다..)

 

MSG msg;
while (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) {
    if (!AfxGetApp()->PumpMessage()) {
        ::PostQuitMessage(0);
        return;
    }
    Sleep(10);
}

'C,C++ > MFC' 카테고리의 다른 글

CMap 사용법  (0) 2021.08.09
CString -> char* 문자열로 변환  (0) 2021.05.11
TRY...CATCH_ALL...END_CATCH_ALL  (0) 2021.02.18