2014-02-12 19 views
0

QT 응용 프로그램에서 QProcess를 사용하여 외부 자식 프로세스를 시작하고 하위 프로세스를 기다리지 않고 주 프로그램의 실행을 계속하는 방법은 무엇입니까? 마치지 만 동시에 완료되면 자식 프로세스에서 콜백을 받습니까?QProcess : 끝내기를 기다리지 않고 자식 프로세스를 시작하지만 완료 신호를 받음

첫 번째 시나리오 : 여기

QProcess* child = new QProcess(); 
connect(child, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(isFinished(int, QProcess::ExitStatus))); 
child->start("example.exe", QStringList() << path); 
. 
. 
. further execution of main application 

는 자식 프로세스가 시작되고 주요 응용 프로그램 실행, 으로 계속하지만, 신호/슬롯 연결이 어떤 QT 오류없이 수행하고 있지만, 는 콜백 할 때이 온다 아이는 끝났어.

두 번째 시나리오 :

QProcess* child = new QProcess(); 
connect(child, SIGNAL(finished(int, QProcess::ExitStatus)), this,  SLOT(isFinished(int, QProcess::ExitStatus))); 
child->start("example.exe", QStringList() << path); 
child->waitForFinished(); 
. 
. 
. NO further execution of main application 

여기 자식 프로세스가 시작되고 주요 응용 프로그램이 실행, 신호에서 완성 된 콜백하지 간다/슬롯이 제대로 온다. 둘 다 내가 원하는 것이 아닙니다.

아이디어가 있으십니까?

+0

첫 번째 시나리오는 잘 작동해야합니다. Qt4.8 디렉토리의 demos \ embedded \ fluidlauncher \ demoapplication.cpp 및 demos \ qtdemo \ menumanager.cpp를 참조하십시오. 코드와 Qt 샘플의 차이점을 볼 수 없습니다. – Bogdan

+0

첫 번째 시나리오는 우리에게 잘 작동하며 올바른 구현이 될 것입니다. –

+0

프로세스가 완료되기 전에'this' 오브젝트가 삭제 될 수 있습니까? –

답변

0

첫 시나리오에서 끝이없는 while/true 블록에서 오류가 발생하여 qt 앱의 메인 이벤트 루프에서 신호/슬롯 처리가 올바르게 수행되지 않았습니다.

힌트 : 우리를위한 해결책은 모든 외부 q 프로세스를 처리하기 위해 qthread를 사용하는 것이 었습니다. 뮤텍스가 필요한 곳을 생각해보십시오.