0
これは、QNXターゲットのコードスニペットです。私はシステムでそれを実行し、私は次の点火サイクル/私のシステムを再起動するとき、それは正常に動作し、GUIはフリーズ/ハングです。QProcess freeze 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 documentation](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 __ <<テキスト; }); QObject :: connect(usbProcess、SIGNAL(finished(int))、this、SLOT(finished(int))); usbProcess-> start( "usb"); – csearun89