首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QLocalSocket -如何丢弃读数

QLocalSocket -如何丢弃读数
EN

Stack Overflow用户
提问于 2012-09-17 21:54:25
回答 1查看 225关注 0票数 0

我使用QLocalSocketMeasurement结构每隔一段时间从服务器程序传输到客户端。

我设置了数据块和QDataStream,然后:

代码语言:javascript
复制
out.writeRawData(data, sizeof(Measurement));
out.device()->reset();

然后,对于每个注册的客户端:

代码语言:javascript
复制
clients_.at(i)->write(block);
clients_.at(i)->flush();

然后在信号readyRead()的另一端

代码语言:javascript
复制
in.readRawData((char *) data, sizeof(Measurement));

我希望发生的是,如果客户端在发送测量值时没有准备好接收,它将跳过一个读数。现在我得到的是:

代码语言:javascript
复制
send 3
read 3
send 4
send 5
read 4

我如何获得:

代码语言:javascript
复制
send 3
read 3
send 4
send 5
read 5
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-18 16:36:29

如果服务器已将某些内容写入管道(并在顶部使用flush()ed ),则客户端只需将其从管道中读出,即可访问后续消息。如果您不想对消息做任何操作,只需在客户端使用in.skipRawData(sizeof(Measurement))即可。但是,如果您想避免客户端获取任何数据,则必须完全阻止服务器发送任何数据。所以某种类型的拥塞控制。从我的想法来看,我会让客户端发出像messageAcknowledgeReadyForNext()notReadyToReceive()这样的信号,在clients_迭代周期中,让我们跳过那些已经发送了not ready的客户端(以及那些不知道至少发送了一个确认的客户端)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12460779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档