Qt waitforbyteswritten()函数中的信号

时间:2014-06-10 09:15:37

标签: c++ c qt qtgui qprocess

我正在使用Qt完成GUI界面,其中包含一个带有事件处理函数的按钮。

当我单击按钮时,会触发事件处理程序并在其中创建一个新进程并考虑到此进程可能需要无输入,单输入或多输入命令。我想知道是否有信号可以告诉我这个新进程何时需要字节写入?或者我怎么可能知道?

注意:我做的唯一解决方案是忙着等待一段时间(真实)嵌套在另一个中,同时检查是否有字节要写入进程或不是单独的QThread但是遗憾的是它不是线程安全的(即用户界面意外关闭)。

有什么建议吗?

代码:

Sample::Sample(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Sample)
{
    ui->setupUi(this);
    stdinThread = new StdinThread(this);
}

Sample::~Sample()
{
    delete stdinThread;
    delete runProcess;
    delete ui;
}

void Sample::on_runBtn_clicked()
{
    // Clear the console before using it

    ui->qConsole->clear();

    runProcess = new QProcess(this);

    runProcess->start(process , argumentList );

    runProcess->waitForStarted();

    stdinThread->start();

    runProcess->waitForFinished();

    // Get the process realtime stdout stream

**Some code for looping on stdout bytes written to the pipe
THEN**

    // Terminate the thread then the process
    stdinThread->terminate();
    runProcess->close();
    runProcess->terminate();
}

Sample::Sample(QWidget *parent) : QMainWindow(parent), ui(new Ui::Sample) { ui->setupUi(this); stdinThread = new StdinThread(this); } Sample::~Sample() { delete stdinThread; delete runProcess; delete ui; } void Sample::on_runBtn_clicked() { // Clear the console before using it ui->qConsole->clear(); runProcess = new QProcess(this); runProcess->start(process , argumentList ); runProcess->waitForStarted(); stdinThread->start(); runProcess->waitForFinished(); // Get the process realtime stdout stream **Some code for looping on stdout bytes written to the pipe THEN** // Terminate the thread then the process stdinThread->terminate(); runProcess->close(); runProcess->terminate(); }

提前致谢。

1 个答案:

答案 0 :(得分:1)

无法以编程方式确定另一个(未知)进程是否需要任何输入。或者甚至是它需要什么类型的输入。 你必须知道你的起点和行为方式。