2016-05-19 61 views
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 
} 
+0

你怎麼知道有內存泄漏? – xaxxon

+0

嗯,這是爲pthreads,但點似乎繼續在這裏http://stackoverflow.com/questions/2163090/when-i-kill-a-pthread-in-c-do-destructors-of-objects- on-stacks-get-called – StoryTeller

+1

由於您在線程中分配的內存,內存泄漏很可能發生。不是堆棧。 –

回答

1

從文檔TerminateThread()

系統釋放線程的初始堆棧。

你在吠叫錯誤的樹。

你當然應該直接使用C++線程類,而不是CreateThread()/TerminateThread()

相關問題