Qt waitforbyteswritten() 函数中的信号

Posted

技术标签:

【中文标题】Qt waitforbyteswritten() 函数中的信号【英文标题】:Signals in Qt waitforbyteswritten() function 【发布时间】:2014-06-10 09:15:37 【问题描述】:

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

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

注意:我所做的唯一解决方案是忙于等待一段时间(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();

提前致谢。

【问题讨论】:

【参考方案1】:

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

【讨论】:

你能解释一下“你必须知道你开始什么以及它是如何表现的”部分吗? ?因为我不明白,因为我理解的是你的意思是我必须知道进程的行为,但想象一下你是否正在启动像“python”这样的进程,并且你想知道“python”何时需要输入这就是我想要实现的目标。 我的意思是当你知道你开始的东西只需要一行输入时,你就可以将它发送到另一个进程。如果你不知道这一点,或者甚至启动一些完全未知的东西,比如 python 程序,你就不会知道程序期望从标准输入读取一些东西。 我正在尝试类似当进程 waitForFinished() 等待进程完成执行然后我创建了一个单独的线程,该线程忙于等待通过调用 waitForBytesWritten() 写入的字节,但不幸的是 GUI 意外关闭但它工作正常,你知道这个问题的可能原因可能是,我正在使用 QTThreads

以上是关于Qt waitforbyteswritten() 函数中的信号的主要内容,如果未能解决你的问题,请参考以下文章

QT串口不工作

如何使用qtcpsocket一次写一个字符串?

QProcess中多次写入的输出一一读取

C++Qt入门---Qt简介,第一个Qt程序,Qt按钮

qt编译问题

Linux 打包 QT 程序