在qt中如何设计心跳检测
我现在在编写一个数据转发系统,需要通过Modbus/TCP协议连接RTU来采集数据并且转发,现在遇到的一个问题就是我无法知道我与RTU到底连接上了没有,当我调用connecttoHost
函数之后调用isOpen
函数总是返回true
,即使我没打开Modbus仿真软件。如果连接过程中连接中断了,也不知道是什么时间中断的,所以我就想设计一个心跳检测,每隔一段时间检测一下有没有断。现在有这样几个问题:
Modbus协议不会主动向服务器发送心跳指令,必须由服务器端先向RTU发送符合Modbus协议格式的指令,RTU才会返回指令。
Qt的信号与槽机制让我不能把心跳检测写在一个函数里面,假设我在
HeartBeat
函数里面对RTU发送了指令,我不能直接在HeartBeat
函数里面读取返回的信息,必须再写一个ReadModbus
槽函数与socket的readyRead
信号绑定在ReadModbus
函数中接收心跳返回信息。我需要通过心跳检测来将一个bool类型赋值。
我尝试过不用心跳检测,把是否连接的检测放在正常数据通信中,即发送指令的同时startTimer
,然后如果在期望时间内接收到了信息,就killTimer
,如果进入timerEvent
就说明连接断了,但是现在遇到一个问题就是我是在另外一个线程里面调用发送消息的函数,无法启动一个计时器。
我现在没想到什么解决办法了,有没有大神做过这种设计的?请大神解惑。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论