2013-12-10 4 views
2

ffmpeg 명령을 시작하려면이 프로그램을 사용하십시오.QT Q 프로세스 메모리 관리

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