找回密码
 立即注册
收起左侧

tcp socket

3
回复
8076
查看
[复制链接]
累计签到:4 天
连续签到:1 天
来源: 2013-12-2 18:58:13 显示全部楼层 |阅读模式
5Qter豆
  1. sendClearSensorValueRecordCmd();//此命令发送出,会返回3条数据包
  2.     sleep(1);
  3.     tcpSocket->readAll();//清空socket,可以这样做吧
  4.     sleep(1);
  5.     tcpSocket->readAll();//再次清空,确认下
  6.     //发送11采集保存命令
  7.     sendStageValueCmd();//此命令发出后,4秒内收到两条命令
  8.     sleep(3);
  9.     //清空socket连接
  10.     tcpSocket->readAll();
  11. //    sleep(2);
  12.     tcpSocket->readAll();
  13.     //发送轮询的20采集命令
  14.     sendQuerySensorValueCmd();//这才是我最需要的命令,但是问题也出在了,这个命令发出后,收的数据包一直不正确。我把传感器串口连接,手动发送上述命令,收的数据很好,没任何错误,所以我肯定出在了这个socket.请问清空那做的对吗??还有别的方法吗?运行至此,理论不应该在收的,前面两个命令的返回数据包,但是现实是收到了,然后才是20这条命令的。
复制代码

最佳答案

查看完整内容

我不懂为什么不用异步而用sleep,你可以试着用QEvenLoop卡在发送和接收中间,当然不推荐这样做,分别写几个函数做异步吧,这样出问题也好找原因
回复

使用道具 举报

尚未签到

2013-12-2 18:58:14 显示全部楼层
我不懂为什么不用异步而用sleep,你可以试着用QEvenLoop卡在发送和接收中间,当然不推荐这样做,分别写几个函数做异步吧,这样出问题也好找原因
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2013-12-3 10:00:26 显示全部楼层
同楼上一样的意见,有时候不能把自己的想象等同于程序的执行。

整个程序是在exec()函数,也就是事件循环的驱动下完成的,很多函数的调用需要事件循环来完成。单纯靠sleep()在一个主线程中进行延时来实现等待效果,往往是会出现问题的。

点评

是的 按你们说的做的 赶巧一个传感器是坏的 害的我调试了好几天 都解决了  详情 回复 发表于 2013-12-3 20:49
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-12-3 20:49:50 显示全部楼层
yafeilinux 发表于 2013-12-3 10:00
同楼上一样的意见,有时候不能把自己的想象等同于程序的执行。

整个程序是在exec()函数,也就是事件循环的 ...

是的  按你们说的做的  赶巧一个传感器是坏的 害的我调试了好几天  都解决了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了