2011-01-17 9 views
0

QProcess에 사용 된 일부 인수를 전달하는 슬롯이 있습니다. 이 인수 중 일부를 사용하여 외부 프로그램을 실행합니다. 문제는이 프로세스의 대기열을 갖고 이전 프로세스가 다음 프로세스를 시작할 때까지 기다리는 것입니다.QProcess에서 대기열을 사용하려면 어떻게해야합니까?

가장 쉽고/쉬운 방법은 무엇이라고 생각하십니까? 여기

내 방법/슬롯 : 여기에

void FirstCase::CallApp(QString text, QString pathAndFileName) 
{ 
    QString command = QString("App1.exe %1 -Z %2").arg(pathAndFileName).arg(message); 
    QProcess* process = new QProcess(this); 
    process->start(command); 
} 

편집 솔루션은, 당신이 그것을 필요로하는 경우 다음 QStringList 아이디어에 따라

을 내 CallApp 방법은 같은 QStringList에 명령을 추가합니다 :

list << command; 

그런 다음 Execute()를 호출합니다.

void FirstCase::Execute() 
{ 
    if(!list_.isEmpty()&&!executing_) 
    { 
     QProcess* p = new QProcess(this); 
     QString c = list_.takeFirst(); 
     p->start(c); 
     executing_=TRUE; 
     connect(p, SIGNAL(finished(int)),this,SLOT(ExecFinished())); 
    } 
} 

void FirstCase::ExecFinished() 
{ 
    executing__=FALSE; 
    Execute(); 
} 
+0

분리 인수가있는 start()의 QStringList 오버로드를 사용하는 것이 좋습니다. 그렇지 않으면 실행중인 프로그램의 경로에 공백이있는 경우와 같이 빠른 시일 내에 인용문 문제가 발생할 수 있습니다. QStringList() 버전은 자동으로 따옴표를 사용합니다. –

+0

완성 된 신호를 잘못 사용하고 있습니다. 내 대답은 아래를 참조하십시오. – ismail

답변

4

QString 대기열을 사용하여 명령을 대기열에 저장하고 저장할 수 있습니다. 그런 다음 큐의 맨 위에서 시작하여 새 프로세스를 시작하고 finished() 신호를 슬롯에 연결하십시오. 해당 프로세스가 완료되면 큐가 비어 있지 않은 경우 새 프로세스를 시작하십시오.

0

finished 함수의 올바른 서명은 다음과 같습니다.

void QProcess::finished (int exitCode, QProcess::ExitStatus exitStatus) 

이렇게 연결해야합니다.

관련 문제