gpt4 book ai didi

c++ - 不使用 readyRead() 信号从 QTcpSocket 读取

转载 作者:太空宇宙 更新时间:2023-11-04 13:53:02 26 4
gpt4 key购买 nike

我有一个 QTcpSocket,它位于与 GUI 不同的线程中。
当通过将 readyRead() 信号连接到某个插槽来使用它时,一切正常。< br/>但是当我不使用它并遇到一个条件控制的 while(conditionControlVar) with msleep() inside, bytesAvailable() always返回 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() 信号已发出。该函数将在 msecs 毫秒后超时;默认超时为 30000 毫秒。如果有新数据可供读取,则返回 true;否则返回 false。所以它可以像:

void startReading()
{
while(conditionVar)
{
if(socket->waitForReadyRead(50))
{
//Read Data
}
}
}

套接字也应该与 startReading() 线程在同一个线程中。

关于c++ - 不使用 readyRead() 信号从 QTcpSocket 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22746067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com