2017-05-03 5 views
0

私は、ブレンダーのレンダリングジョブマネージャーを作っています。私は、レンダリングジョブのキューを構築し、次に「開始」をクリックするクラスを持っていて、ループで一度に1つずつレンダリングを開始します。私の問題は、waitForFinished()メソッドが私のプログラム全体を保持しているということです。しかし、QThreadQProcessを使用しないでください。これは、QThreadをQProcessで使用する適切な時期ですか?

ループの仕組みです。

do{   
if(myProcess->state() == QProcess::NotRunning) { 

      myProcess->setProgram(blenderPath); 
      myProcess->setArguments(arguments); 
      myProcess->start(); 
      myProcess->waitForFinished(-1); 

      //Get rid of current rendering job to prepare for the next job 
      renderQueueList.pop_front(); 
     } 

     }while(renderQueueList.empty() != true); 

私はQProcessを起動するには、別のスレッドを使用することができますし、何がこれを行うための最善の方法だろうか? QThreadの要約を作成したり、シグナルやスロットを使用していますが、プロセスに引数を渡す必要があるときは特に混乱します。

ありがとうございます。

編集: 新しいプロセスを実行する前にプロセスを終了する必要があることを追加します。それは順番に行かなければならない。だから私は自分のスレッドで実行するプロセスが必要だと思うのです。

+1

代わりに 'finished()'シグナルを聞くのはなぜですか? – MrEricSir

+0

@MrEricSirあなたは正しいです....ここは記事ですhttp://www.qtcentre.org/threads/26067-Article-How-to-QProcess-in-QThread – Naidu

+0

私は混乱しています。この記事では、新しいスレッドでプロセスを作成する方法を示していますが、コメント者はこれが悪いと言っています。どちらですか? – LetTheWritersWrite

答えて

1

QProcessはすでに別のプロセス、つまりアプリケーションと非同期で実行されています。

waitForFinished()を呼び出すと、アプリケーションはQProcessのプロセスが終了するまでロックします。代わりにfinished()とおそらくerrorOccured()シグナルに接続する必要があり、QProcessがバックグラウンドで実行されている間はアプリケーションは実行され続けます。

このループを変更して、キューが空でないことを確認し、finished()シグナルで新しいプロセスを開始する必要があります。

QProcessesを実行するQThreadを実行してwaitForFinished()を実行すると、メインのアプリケーションスレッドは実際に解放されますが、QProcessが既に非同期であり、完了した時点で()スレッドをロックせずに実行します。UIスレッドでも、別のスレッドでもかまいません。

+0

には非常に良い例があります。プロセスの 'finished()'シグナルにアクセスする必要があります。私はちょうど 'QProcess :: NotRunning'が自分のコードでも動作していないことに気付きました。私はどこかでそれを行うことができたが、それは完全に間違っている。だからあなたが提案しているのは、それぞれのフィニッシュ後に関数を開始する再帰的な接続を作成することです。私の関数内では空の場合にQListをチェックするためのif文しかありません。あなたは接続を手伝ってくれますか?私はドキュメントが何を言っているのか理解できません。彼らはラムダを使用し、オブジェクトを作成する必要があるかどうかを指定したり、接続するためのものを指定しません。 – LetTheWritersWrite

+0

私は接続を作成し、上記のコードをスロットとして持ち、再帰的に呼び出す方法を考え出しました。完璧に働いた! 'do while'ループを取り除いて、ifステートメントで置き換えて、renderQueueListが空であればそれを確認してから、再度プロセスを開始します。本当にありがとう! – LetTheWritersWrite

関連する問題