2
我正在使用一個看門狗線程來監視visual C++中的一個子線程,如果它在一段時間後停止發送事件給看門狗,看門狗將終止子進程並創建一個新的子線程。在我的測試中,我反覆終止並重新生成子線程,然後纔有機會退出,並且我發現它會導致內存泄漏。我的主要疑慮是由於孩子創建的堆棧內存,並在終止時未能釋放。在重新生成新的子線程之前,看門狗線程是否有任何方法手動釋放子線程的堆棧內存?我實際上使用這種方法殺死任何凍結線程,到目前爲止,TerminateThread()是我可以選擇的唯一選擇。以下是我如何進行測試的一個簡單例證。謝謝。如何在線程強行終止後手動釋放堆棧內存?
void watchdogFunc (void)
{
while(true){
child = CreateThread(NULL, 0, childFunc, NULL, 0, NULL);
TerminateThread(child, 1);
}
}
void childFunc (void)
{
while(true){} //simulated thread freeze
}
你怎麼知道有內存泄漏? – xaxxon
嗯,這是爲pthreads,但點似乎繼續在這裏http://stackoverflow.com/questions/2163090/when-i-kill-a-pthread-in-c-do-destructors-of-objects- on-stacks-get-called – StoryTeller
由於您在線程中分配的內存,內存泄漏很可能發生。不是堆棧。 –