2013-12-10 99 views
2

如果我在我的程序中使用它來啓動ffmpeg命令。QT QProcess內存管理

QProcess *cmd1 = new QProcess(); 

cmd1->start(ffmpeg command); 

if (!cmd1->waitForStarted()) 
    return false; 

if (!cmd1->waitForFinished()) 
return false; 

然後在整理過程將內存從堆釋放其自身的或我必須使用

刪除CMD1。

+0

你必須自己刪除你的'QProcess'。調用'cmd1-> deleteLater()'也可以。 – vahancho

回答

2

如果您將Parent設置爲如下所示的QProcess,那麼您不需要手動刪除它。

父可以是創建QProcess的QObject。

QProcess *cmd1 = new QProcess(parent); 

但是,如果你不能設置父母,那麼你需要刪除它。

+2

它可能仍然是一個問題,但如果父對象是具有應用程序生命週期的對象,但會啓動大量進程。然後,QProcess對象將不會被刪除,直到刪除父項爲止。在應用程序退出。我在這種情況下立即清理一下。 –

5

或者,或除了可以設置進程,刪除自身,當它完成: -

// using Qt 5 connect syntax 
connect(cmd1, &QProcess::finished, cmd1, &QProcess::deleteLater); 

這可能是首選的方法,如果你傳遞給你的QProcess中的對象的父對象可能比QProcess對象需要更長的生命週期。

+0

是否值得刪除過程?如果您有一個實時應用程序,它不會運行幾個小時,從性能角度來看可能會更好,而不是刪除。 – user1767754