serialPort.waitForReadyRead()收取不到数据, 通过连接信号 readyread能读取到数据,原因是什么
时间: 2024-03-29 22:34:40 浏览: 117
QTcpSocket readyread不触发或者只触发几次,readAll()丢数据,收不全数据的原因及解决办法
5星 · 资源好评率100%
`serialPort.waitForReadyRead()` 是一个阻塞函数,它会阻塞当前线程直到有新的数据被接收到或者超时。如果在调用 `waitForReadyRead()` 函数时没有数据可以读取,那么当前线程就会一直被阻塞,直到有新的数据被接收到或者超时时间到达。
而 `readyRead` 信号是一种异步的事件处理机制,当有新的数据被接收到时,就会触发该信号,然后执行对应的槽函数。因此,使用 `readyRead` 信号可以实现非阻塞的串口通信,避免在读取数据时阻塞主线程。
所以,如果你使用 `serialPort.waitForReadyRead()` 函数无法读取到数据,可能是因为在调用该函数时没有数据可以读取,导致当前线程一直被阻塞。而使用 `readyRead` 信号则可以确保在有数据可以读取时立即响应,避免阻塞主线程。
阅读全文