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 = 새로운 QProcess (this); QObject :: connect (usbProcess, & QProcess :: readyReadStandardOutput, [this]() { text = usbProcess-> readAllStandardOutput(); text.replace (",", ", \ n"); text.replace ":", "\ n :"); qDebug() << __ LINE __ << __ PRETTY_FUNCTION __ << text; }); QObject :: connect (usbProcess, SIGNAL (finished (int)), this, SLOT (finished (int))); usbProcess-> start ("usb"); – csearun89