Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt waitForBytesWrite()函数中的信号_C++_C_Qt_Qtgui_Qprocess - Fatal编程技术网

C++ Qt waitForBytesWrite()函数中的信号

C++ Qt waitForBytesWrite()函数中的信号,c++,c,qt,qtgui,qprocess,C++,C,Qt,Qtgui,Qprocess,我用Qt制作了一个GUI界面,其中包含一个带有事件处理函数的按钮 当我单击按钮时,事件处理程序被触发,在它里面我创建了一个新的进程,并考虑到这个进程可能不需要输入、单输入或多输入命令。我想知道是否有一个信号可以告诉我这个新进程何时需要写入字节?或者我怎么可能知道 注意:我所做的唯一解决方案是,在检查是否有字节要写入进程或不在单独的QThread上时,忙于等待一段时间(true)嵌套在另一个QThread中,但遗憾的是,它不是线程安全的(即UI意外关闭) 有什么建议吗 代码: Sample::S

我用Qt制作了一个GUI界面,其中包含一个带有事件处理函数的按钮

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

注意:我所做的唯一解决方案是,在检查是否有字节要写入进程或不在单独的QThread上时,忙于等待一段时间(true)嵌套在另一个QThread中,但遗憾的是,它不是线程安全的(即UI意外关闭)

有什么建议吗

代码:

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();
}


提前感谢。

无法通过编程确定另一个(未知)进程是否需要任何输入。甚至它需要什么类型的输入。
你必须知道你从什么开始以及它是如何运作的。

你能解释一下“你必须知道你从什么开始以及它是如何运作的”这部分吗?因为我没有理解,因为我理解的是,你的意思是我必须知道流程的行为,但是想象一下,如果你正在启动一个类似“python”的流程,并且你想知道“python”是什么时候开始的需要输入或不需要输入,这就是我想要完成的。我的意思是,当你知道你开始某件事情时,只需要一行输入,然后你就可以将它发送到另一个进程。如果您不知道这一点,或者甚至不启动一些完全未知的程序,比如python程序,那么您就不会知道程序希望从stdin读取一些内容它会一直等到进程完成执行,然后我创建了一个单独的线程,忙碌地等待通过调用WaitForBytesWrite()写入的字节,但不幸的是GUI意外关闭,但工作正常,您知道这个问题的可能原因是,我使用了QTThreads