gpt4 book ai didi

c++ - QProcess 卡住 GUI

转载 作者:行者123 更新时间:2023-12-03 12:49:11 26 4
gpt4 key购买 nike

这是 QNX 目标的代码片段。当我在系统上运行它时它工作正常,当我执行下一个点火周期/重新启动系统时,GUI 卡住/挂起。

如果可能,请告诉我这段代码有什么问题。

我尝试使用 readAllStandardOutput 并完成并启动信号,也遇到同样的问题。这没有帮助。

qCDebug(SYSTEM)<<"--RDQA--"<<__LINE__<<__PRETTY_FUNCTION__<<!usbProcess;
usbProcess = new QProcess();
qCDebug(SYSTEM)<<"--RDQA--"<<__LINE__<<usbProcess->pid();
usbProcess->start("usb");
qCDebug(SYSTEM)<<"--RDQA--"<<__LINE__<<usbProcess->pid();;
usbProcess->waitForReadyRead();
qCDebug(SYSTEM)<<"--RDQA--"<<__LINE__;
usbProcess->waitForFinished();
qCDebug(SYSTEM)<<"--RDQA--"<<__LINE__;
text = usbProcess->readAll();
qCDebug(SYSTEM)<<"--RDQA--"<<__LINE__<<!usbProcess<<text;
usbProcess->closeReadChannel(QProcess::ProcessChannel::StandardOutput);
usbProcess->closeReadChannel(QProcess::ProcessChannel::StandardError);
usbProcess->closeWriteChannel();
usbProcess->close();
delete usbProcess;
qCDebug(SYSTEM)<<"--RDQA--"<<__LINE__<<!usbProcess;

最佳答案

您正在 GUI 线程上运行阻塞进程。这就是你的 GUI 挂起的原因。

我通常创建两种方法。一种是阻塞,另一种是非阻塞。调用Blocking方法using the Qt Concurrent framework通过非阻塞方法。完成后会发出一个信号并返回任何数据。

// Runs the usb process without blocking
void MyClass::runUsbProcess(){
QtConcurrent::run(this, &MyClass::runUsbProcessBlocking);
}

// Runs the usb process while blocking
void MyClass::runUsbProcessBlocking(){
qCDebug(SYSTEM)<<"--RDQA--"<<__LINE__<<__PRETTY_FUNCTION__<<!usbProcess;
usbProcess = new QProcess();

qCDebug(SYSTEM)<<"--RDQA--"<<__LINE__<<usbProcess->pid();
usbProcess->start("usb");

qCDebug(SYSTEM)<<"--RDQA--"<<__LINE__<<usbProcess->pid();;
usbProcess->waitForReadyRead();

qCDebug(SYSTEM)<<"--RDQA--"<<__LINE__;
usbProcess->waitForFinished();

qCDebug(SYSTEM)<<"--RDQA--"<<__LINE__;
text = usbProcess->readAll();
qCDebug(SYSTEM)<<"--RDQA--"<<__LINE__<<!usbProcess<<text;

usbProcess->closeReadChannel(QProcess::ProcessChannel::StandardOutput);
usbProcess->closeReadChannel(QProcess::ProcessChannel::StandardError);
usbProcess->closeWriteChannel();
usbProcess->close();

delete usbProcess;
qCDebug(SYSTEM)<<"--RDQA--"<<__LINE__<<!usbProcess;

emit usbProcessFinished(text);
}

关于c++ - QProcess 卡住 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46212391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com