2013-09-27 73 views
-1

該應用程序是內存泄漏,所以作爲一個臨時解決方案,我會檢查它需要多少內存,殺死進程並重新啓動應用程序。Qt C++自行重啓

有沒有簡單的方法可以做到這一點?

謝謝

+0

爲什麼你需要做的,而不是固定的自省Valgrind的或相似的輸出泄漏?無論如何,你是不是可以爲你的應用程序編寫一個包裝程序來調用「free」util或使用「/ proc/meminfo」,關閉你的應用程序,然後重新啓動它?跨平臺很難做到,但這當然是可能的。 – lpapp

回答

0

您可以覆蓋new和delete保持分配統計程序,然後當基於可用MEM達到閾值,中止()。然後在外部腳本中,您可以重新啓動。

也看到優秀的顯示器靂,在這裏:https://bitbucket.org/wez/gimli/wiki/Monitor

+0

你碰巧有一個例子說明這一點? –

+0

不方便,沒有。我認爲valgrind的方法來查找上面Laszlo Papp建議的泄漏在這裏是一個很好的方法。 – rileyberton

1

你應該可以解決內存泄漏。任何方式如果你想重新啓動你的應用程序,你可以使用QProcess::startDetached在一個新的進程中運行你的應用程序的一個實例,並從中分離出來。之後,你應該退出應用程序。

這將重新啓動你的應用程序:

QProcess process; 
process.startDetached("myApp",QStringList()); 

qApp->quit(); 

這裏myApp是應用程序的可執行文件的名稱。在Windows上,它可以是myApp.exe

0

要單獨重新啓動應用程序,請嘗試:

#include <QApplication> 
#include <QProcess> 

... 

// restart: 
qApp->quit(); 
QProcess::startDetached(qApp->arguments()[0], qApp->arguments());