2
我想要實現一個超時機制,如果arduino在一秒內沒有讀取命令,它會導致超時,並且新命令被丟棄,程序運行正常。 但是現在,如果在執行舊命令期間發送了任何新命令,程序就會掛起。QT與Arduino的串行通訊超時
這是我的代碼的超時部分:
QByteArray requestData = myRequest.toLocal8Bit();
serial.write(requestData);
if (serial.waitForBytesWritten(waitTime)) {
if (serial.waitForReadyRead(myWaitTimeout)) {
QByteArray responseData = serial.readAll();
while (serial.waitForReadyRead(10))
responseData += serial.readAll();
QString response(responseData);
emit this->response(response);
} else {
emit timeout(tr("Wait Read Request Timed Out %1")
.arg(QTime::currentTime().toString()));
}
} else {
emit timeout(tr("Wait Write Request Timed Out %1")
.arg(QTime::currentTime().toString()));
}
的timeout
信號連接到只是打印超時消息,並且不執行任何操作的槽。 我該如何解決這個問題,以便我可以實現我的目標?
不要編寫任何使用'waitFor'方法的代碼,並且不會有這樣的問題。看到[這個答案](https://stackoverflow.com/a/32595398/1329652)提供了一個可讀的代碼,並很好地處理異步行爲。另請參閱[answer1](https://stackoverflow.com/a/43703784/1329652),[answer2](https://stackoverflow.com/a/36437247/1329652)和[answer3](https:// stackoverflow。 COM /一個/一百三十二萬九千六百五十二分之四千零二十四萬七千六百七十六)。 –