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