Windows/MFC

Kill Thread

aucd29 2013. 10. 2. 18:05
1. 완전 강제로 죽이기
TerminateThread(pParent->m_pThread->m_hThread, 0);

2. 타협해서 죽이기? ㅎ
살다보니 제가 답을 적을때가 다 있네요 ^^;
저도 serial 프로그램을 짜다가 강제 종료하게 되면 항시 메모리 leak이 발생해서 고민 했었는데...
MSDN을 잘~~ 보니 답이 써 있더군요.

If a process attempts to change the device handle's event mask by using the SetCommMask function while an overlapped WaitCommEvent operation is in progress, WaitCommEvent returns immediately. The variable pointed to by the lpEvtMask parameter is set to zero.

외부에서 플래그를 하나 두고 미리 설정 합니다.
쓰레드를 종료하고자 하는 곳에서 SetCommMask를 하면 WaitCommEvent가 깨어 납니다.
이때 루프를 탈출하면 됩니다.

코드 부분만 조금 올립니다.
[code]
if (pThread)
{
        pThread->b_terminate = true;    // Terminate Flag
        if (::SetCommMask(m_Handle, 0 ) == FALSE)                     <= 이걸로 깨웁니다.
                return;
        WaitForSingleObject(pThread->m_hThread,INFINITE);
        delete pThread;
        pThread = NULL;
}
[/code]
도움이 되었길...

                                                 +_+ Dark Avenger... +_+

Link : http://www.devpia.com/Forum/BoardView.aspx?no=275308&ref=275266&page=4&forumname=VC_QA&stype=&KeyW=%be%b2%b7%b9%b5%e5+%c1%d7%c0%cc%b1%e2&KeyR=titlecontent