0
这是QNX目标的代码片段。当我在系统上运行它时,以及当我执行下一个点火周期/重新启动系统时,它会正常工作,GUI会冻结/挂起。QProcess冻结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;
我不知道我完全理解这个问题,但是......如果你检查[QProcess文档](http://doc.qt.io/qt-5/qprocess.html),那么' waitForReadyRead'和'waitForFinished'带有警告“从主(GUI)线程调用此函数可能会导致您的用户界面冻结”。改用信号/插槽。 –
我试过了。请看看... – csearun89
usbProcess = new QProcess(this); qObject :: connect(usbProcess,&QProcess :: readyReadStandardOutput,[this](){ text = usbProcess-> readAllStandardOutput(); text.replace(“,”,“,\ n”); text.replace “:”,“\ n:”); qDebug()<< __ LINE __ << __ PRETTY_FUNCTION __ << text; }); (完成(int)),这个,SLOT(finished(int))); usbProcess-> start(“usb”); – csearun89