2016-07-17 3 views
1

Qt에서 QProcess로 시작한 하위 프로세스를 일시 중단하고 다시 시작할 수 있습니까?Qt에서 QProcess로 시작된 하위 프로세스 일시 중지 및 다시 시작

나는 QProcess를 사용하여 서브 프로세스로 eSpeak를 (텍스트 음성 합성기를) 시작 (그리고 나는 그것의 표준 입력을 통해 그것을 텍스트를 공급) :

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

그것이 내가이없는 하위 프로세스이기 때문에 전반적으로 제어 할 수는 있지만, 일시 중지하고 하위 프로세스를 다시 시작하여 구현하려는 연설을 일시 중지했다가 다시 시작하는 옵션을 추가하려고합니다.

QProcess에서 함수를 찾을 수 없으므로 플랫폼 별 방법을 사용해야합니다. 저는 리눅스를 사용하고 있습니다. 따라서 SIGSTOP 및 SIGCONT, as suggested by this thread 신호를 보내 드리겠습니다. 그러나 프로세스 처리/pid가 필요합니다.

+0

espeak 프로세스를 중지하면 스피커에서 나오는 소리가 즉시 중단되는 경우 일 수도, 중지되지 않을 수도 있습니다. –

+0

나는 그것을 내 컴퓨터 (Ubuntu Linux)에서 테스트했고 사운드는 즉시 멈췄다. 왜 즉시 멈추지 않을까요? – sashoalm

+0

espeak의 구현 방법에 따라 다릅니다. 한 번에 많은 양의 텍스트를 합성하여 기본 하드웨어 (또는 사운드 데몬과 같은 다른 프로세스)로 보내면 프로세스를 중지해도 이미 보낸 청크에 영향을 미치지 않으며 끝까지 재생됩니다 . –

답변

2

리눅스를 사용하고 있기 때문에 kill() 기능을 사용했습니다.

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

완벽하게 작동합니다 ... 저는 C++ Qt QProcess를 사용하고 있습니다.이 기능은 일시 중지 및 프로세스 재개와 같은 기능을합니다 ... – Maxx