오답노트
CWinThread 프로그램 종료 시 스레드 종료 안됨 본문
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 |