arduinoが1秒以内にコマンドを読み込まないとタイムアウトになり、新しいコマンドが破棄されてプログラムが正常に動作するようなタイムアウトメカニズムを実装したいと考えています。 今のところ、新しいコマンドが古いコマンドの実行中に送信されると、プログラムはハングします。ArduinoとのQTでのシリアル通信タイムアウト
これは私のコードのタイムアウトセクションである:
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'メソッドを使用するコードを記述しないでください。このような問題はありません。読解可能なコードを提供し、非同期動作にうまく対処するための1つの可能なアプローチについては、[この回答](https://stackoverflow.com/a/32595398/1329652)を参照してください。 [回答1](https://stackoverflow.com/a/43703784/1329652)、[回答2](https://stackoverflow.com/a/36437247/1329652)、[回答3](https:// stackoverflow。 com/a/40247676/1329652)。 –