質問: QSerialPortを使ってデバイスと通信を行うプログラムを作成しています。 データをデバイスに送って、デバイスからデータが来たら`readyRead()`シグナルが来て connectしたスロットが呼び出される という基本的な流れはできているのですが データを送って、データが返って来たらすぐに新たにデータを送って... という高速なデータのやり取りを行っていると デバイスからデータはきているはずなのに、 `readyRead()`シグナルが発せられない?時があり、スロットが呼び出されず 流れが止まってしまう不具合に悩まされています。 デバイスからデータが来ているというのはツールを使って確認済みなのでそこに間違いはありません また、データを送ったら`waitForReadyRead(500)`で`readyRead()`を500msのタイムアウト有りで待っているのですが そこはタイムアウトが発生せずに抜けていることが確認できています そこを考えるとシグナルが発せられていないわけではないのか?となって居るのですが そこを確認する方法が分からず困ってる状況です シグナルは発せられているのか否かが分かればもう少し進展するとは思うのですが... このような状況に覚えがある方 また、こうデバッグしたら状況が分かるのではないか等 助言を頂きたいと思っております、よろしくおねがいします ### 追記 readRead()シグナルが来なくて流れが止まってしまった後に 自発的にスロットを呼び出してみると、データを読み出すことができました つまりデータはアプリケーションまでしっかりと届いている状況なのに シグナルが発せられていない、もしくはスロットを呼び出せていない状況みたいです これを修正するにはどのようにしたら...
回答: https://doc.qt.io/qt-5/qiodevice.html#readyRead 上記ページの readyRead() is not emitted recursively; if you reenter the event loop or call waitForReadyRead() inside a slot connected to the readyRead() signal, the signal will not be reemitted (although waitForReadyRead() may still return true). の説明の部分が原因だったと思われます