2016-07-17 10 views
1

Wie kann ich einen Unterprozess, der als QProcess in Qt gestartet wurde, anhalten und fortsetzen?Aussetzen und Fortsetzen eines von QProcess gestarteten Unterprozesses in Qt

Ich beginne espeak (ein Text-to-Speech Synthesizer) als subprocess QProcess mit (und ich füttere sie den Text durch seine stdin):

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

Da es ein subProzess Ich habe nicht ein ganz viel Kontrolle darüber, aber ich möchte die Option hinzufügen, um die Rede anzuhalten und fortzusetzen, die ich implementieren wollte, indem ich den Unterprozess aussetzte und wieder aufnahm.

Ich konnte jedoch keine Funktion in QProcess dafür finden, also sollte ich vielleicht einen plattformspezifischen Weg gehen. Ich bin auf Linux, also werde ich wahrscheinlich ein Signal senden - SIGSTOP und SIGCONT, as suggested by this thread. Ich brauche dafür aber den Prozess handle/pid.

+0

Wenn Sie den espeak-Prozess stoppen, hören Sie möglicherweise sofort auf, dass der Ton aus Ihren Lautsprechern kommt. –

+0

Ich habe es auf meinem Computer (Ubuntu Linux) getestet, und der Ton hört sofort auf. Warum sollte es nicht sofort aufhören? – sashoalm

+0

Es hängt davon ab, wie espeak implementiert ist. Wenn es einen großen Textabschnitt gleichzeitig synthetisiert und an die zugrunde liegende Hardware (oder an einen anderen Prozess, z. B. einen Sound-Daemon) sendet, hat das Stoppen des Prozesses keine Auswirkungen auf den bereits gesendeten Chunk und würde bis zum Ende abgespielt . –

Antwort

2

Da ich auf Linux bin, habe ich die kill() Funktion verwendet.

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

Funktioniert perfekt ... Ich benutze C++ Qt QProcess und das funktioniert wie ein Zauber, wenn ich einen Prozess pausiere und wieder aufnehme ... – Maxx

Verwandte Themen