Thread를 사용하다 보면,

CreateThread 후 생성된 Thread가 return등으로 정상 종료되지 않고,

TerminateThread로 종료하는 경우 메모리 증가 현상이 발생된다.

CloseHandle 처리되면 Handle 증가는 되지 않지만,

TerminateThread 사용은 극단적인 경우를 제외하고 사용하지 않을것을 MSDN도 권고하고 있다.

 

TerminateThread를 사용하는 하기 샘플 소스 코드의 경우)

 

if(m_hStateThread) <= Thread 핸들
{
TerminateThread(m_hStateThread,0); <= 강제 종료.
CloseHandle(m_hStateThread); <= 핸들 닫기(Handle Count 1 삭제됨)
m_hStateThread = NULL;
m_dwStateThreadID = 0;
}


// 신규 Thread 핸들 및 ThreadID 생성.
m_hStateThread = CreateThread(NULL, 0, StateThreadProc, (void*)this, 0, &m_dwStateThreadID);

 

생성된 Thread가 정상 종료될 수 있도록 처리)

if(m_hStateThread)
{

// 생성된 Thread내에서는 WM_QUIT 메세지 처리하여 Thread loop를 빠져나가도록 코딩해야함.

PostThreadMessage(GetThreadId(m_hStateThread), WM_QUIT, 0, 0);
// TerminateThread(m_hStateThread,0);
CloseHandle(m_hStateThread);

m_hStateThread = NULL;
m_dwStateThreadID = 0;
}

m_hStateThread = CreateThread(NULL, 0, StateThreadProc, (void*)this, 0, &m_dwStateThreadID);

 

// Thread 내부 구조..

DWORD StateThreadProc()

{

While(GetMessage(&msg, NULL, WM_QUIT, 0) <= WM_QUIT인 경우, return 값이 0이다.

{

.............

}

return 0;

};

 

+ Recent posts