2014-06-11 253 views
0

我有一個從QThread的繼承一個類(讓稱它爲ClassA的),其在運行中的for循環刪除的QThread像以下:處理和循環

for(int i=0;i<somenumber;i++) 
{ 
    ClassA* classa = new ClassA(); 

    classa->execute(); // just a normal direct function call 

    classa->exit(); 
    classa->deleteLater(); 
} 

的問題是ClassA的含有很多內存,並且在循環仍在運行時似乎沒有被破壞。所以程序在內存建立之後會很快崩潰(如內存泄漏)。我試圖使用「刪除classa」,這當然會導致程序崩潰。

任何人都知道如何在循環中正確運行和刪除這樣的類,所以它不會不斷地佔用內存。

for循環也位於另一個線程中。所以有一個線程層次結構,事件循環可能是調用deleteLater()的關鍵。代碼有點太複雜了,但我想要的最快捷的答案可能是如何在線程環境中正確刪除Qthread對象(即正確使用eventloop),所以沒有內存泄漏(或者更像是將內存構建爲Qthread對象不會被刪除)

+0

[發佈最小的,完整的,有效的示例](http://stackoverflow.com/help/mcve)。 – Rakib

+0

代碼有點太複雜了,但我想要的最快捷的答案可能是如何在線程環境中正確刪除Qthread對象(即正確使用eventloop),所以沒有內存泄漏(或者更像是內存構建因爲Qthread對象沒有被刪除) –

回答

0

在重新實現run()的情況下,您可以始終使用wait()來完成線程。 我假設您的方法​​調用start()。 然後你可以savely刪除它直接(使用示例代碼):

for(int i=0;i<somenumber;i++) 
{ 
    ClassA* classa = new ClassA(); 

    classa->execute(); // just a normal direct function call 

    classa->exit(); 
    classa->wait(); // wait till the QThread is finished 
    delete classa; // immediately free resources 
}