2009-11-30 41 views
1

我正在調用一個循環中的進程。需要確保一個進程在再次啓動之前結束。這怎麼可能。qt - qprocess在循環中啓動

void MainWindow::setNewProjectInQueueList() 
{ 
// this is already gotten in queueList now loop thru the list and add project 
    QStringList arguments; 
    projNm = ui->lineEditCreateProject->text(); 
    qDebug() << " projNm " << projNm; 
    for (int j= 0; j < queueList.length(); j++) 
    { if (! QString(queueList[j]).isEmpty()) 
     { 
//   call process 
//   QString queueName = queueList[j]; 
      arguments << "-sq" << queueList[j]; 
      qDebug() << " arguments sq " << queueList[j]; 
      procQueueList.start("qconf",arguments); 

     } 
    } 

// and append for each queue with new project name 
// and store into the system 
} 

Brgds,

kNish

+0

'procQueueList'類型是什麼? – 2009-11-30 14:06:29

回答

0

在主線程的循環內使用waitForFinished方法會凍結應用程序。相反,把循環放在一個單獨的線程中,或者讓一個進程隊列啓動,然後在從前一個完成的信號上啓動時是很好的選擇。

+0

...糾正我,如果我錯了...我從迄今爲止所說的迄今是什麼收集是.. 1)創建一個單獨的線程(新線程)。這裏是你說我應該爲循環中的每個新進程製作一個獨立的線程。那麼什麼。 或 2)創建一個隊列... - 從這我所瞭解的是 使用線程進行隊列進程。在前一次遇到麻煩後啓動一個。 Brgds, knish – nish 2009-12-01 13:50:45

+0

實際上,有兩種不同的解決方案。無論你有,但與waitForFinished,你的循環運行在一個單獨的線程。或者,創建一個從中啓動一個進程的隊列。當每個過程完成後,他們發出一個信號(完成)。在那個信號上,嘗試啓動下一個過程。 – e8johan 2009-12-02 07:40:56

+0

在新線程中啓動QProcesses,這是不必要的(如果我可能不同意)。通過QProcess的'signal/slots'系統的特性,只需根據需要啓動(在一個循環中,一行一行),然後連接到'finished()''signals','readLine()'等等取回數據。使用'kill()'終止。不需要多線程或使用阻塞方法,如'waitForFinished()'。我一次成功地維護了3個或更多的進程而無需線程。 – Rachael 2015-03-31 16:44:00