2016-07-17 13 views
1

QtでQProcessとして起動したサブプロセスを中断して再開するにはどうすればよいですか?QtでQProcessによって開始されたサブプロセスを中断して再開する

私はQProcessを使用してサブプロセス(と私はそれにその標準入力によるテキストを養う)として(テキスト音声合成)espeak開始:それは私が持っていないサブプロセスなので

espeak = new QProcess(this); 
espeak->start("espeak"); 
espeak->write(text.toUtf8()); 

その全体を制御することができますが、サブプロセスを中断して再開することで実装しようとしていた音声を一時停止して再開するオプションを追加したいと考えています。

QProcessで関数を見つけることができませんでしたが、プラットフォーム固有の方法を使用する必要があります。私はLinux上にいるので、恐らくシグナルを送るでしょう - SIGSTOPとSIGCONT、as suggested by this thread。しかし、私はプロセスハンドル/ pidが必要です。

+0

espeakプロセスを停止すると、スピーカーから出力される音がすぐに止まることがあります。 –

+0

私のコンピュータ(Ubuntu Linux)でテストしたところ、すぐに音が止まりました。なぜそれはすぐに止まらないだろうか? – sashoalm

+0

espeakの実装方法によって異なります。一度に大量のテキストを合成し、それを基礎となるハードウェア(またはサウンドデーモンなどの別のプロセス)に送信すると、プロセスの停止はすでに送信されたチャンクには影響せず、終了まで再生されます。 –

答えて

2

私はLinux上にいるので、kill()関数を使用しました。

#include <signal.h> 
... 
kill(process->pid(), SIGSTOP); // suspend 
kill(process->pid(), SIGCONT); // resume 
+0

完全に動作しています...私はC++ Qt QProcessを使用していますが、これはプロセスを一時停止して再開する際の魅力のように機能します... – Maxx

関連する問題