从 QTcpSocket 读取而不使用 readyRead() 信号
Read from QTcpSocket without using readyRead() signal
我有一个与GUI不同的线程中的QTcpSocket
。
当通过将信号连接到某个插槽来使用readyRead()
信号时,事情可以正常工作。
但是当我不使用它并遇到内部有msleep()
的条件控制while(conditionControlVar)
时,bytesAvailable()
总是返回 0。
是的,我的套接字与我正在阅读的线程相同。
//when connection with Server is established
startReading();
...
void startReading()
{
while(conditionVar)
{
qDebug()<<"Bytes Avl:"<<socket.bytesAvailable(); //Always Zero
if(bytesAvailable < 8)
thread()->msleep(50);
else
{
//Read Data
}
}
}
您可以使用waitForReadyRead(int msecs)
阻止,直到有新数据可供读取并且发出readyRead()
信号。该函数将在毫秒毫秒后超时;默认超时为 30000 毫秒。如果有新数据可供读取,则返回 true;否则返回 false。所以它可以像:
void startReading()
{
while(conditionVar)
{
if(socket->waitForReadyRead(50))
{
//Read Data
}
}
}
套接字也应与线程位于同一线程startReading()
。
相关文章:
- Qt VTK交互风格的信号到小部件
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 线程之间的布尔停止信号
- QSerialPort readyRead() 信号无法正常工作
- 写入QTcpSocket并不总是在对面的QTcpSockets上发出readyRead信号
- QTcpSocket readyRead() 信号发出两次
- 为什么执行socket :: readyread()的新信号,即使其较早的插槽仍在处理
- 来自qsocket的ReadyRead()信号的行为
- 问题5.2:QLocalServer接收重复的readyRead信号
- qt qudpsocket:readyread()信号和相应的插槽无法正常工作
- 我如何知道哪个 QTcpSocket 发出了 readyRead() 信号
- Qt udp套接字,什么会触发套接字的readyRead信号?
- 调用QextSerialPort(QIODevicece)的readyRead()信号的速度不够快
- Qt 5和QProcess用信号/插槽readyRead重定向stdout
- 如何确保来自 QTcpSocket 的 readyRead() 信号不会被错过?
- QtSerialPort:readAll不会产生所有数据,也没有新的readyRead信号
- 从 QTcpSocket 读取而不使用 readyRead() 信号
- QUdpSocket 不发出 readyRead() 信号