- 主题:socket通信,实时性太差的问题
8月份到12月初,还没搞定?
【 在 hengcuiyuan 的大作中提到: 】
: 我现在是多线程环境,通信程序在一个独立的线程里面,有点坑的是三菱的3E帧结构不含数据包的序列号的,所以我只能同步通信,我现在是只能一次通信完成之后再做下一次通信,信道被占用的时间里面就用QCoreApplication::processEvents去做事件处理。这种情况下,我发现:1、Debug模式下,数据包到了之后readyRead信号没有被触发,但release模式下,readyRead大部分情况被触发了;2、release模式下,偶尔出现数据包呆在协议栈里面几秒钟,readyRead不被触发,但是下一个数据包到来的时候,readyRead被立刻触发,导致粘包,无法处理;3、数据通信的时间很短,但是从协议栈到socket的时间要长的多。
: 可能是我的代码真写的有问题,我现在是需要读的时候读,需要写的时候写,每次数据传输的报文很小,再加上多线程环境,又没法搞异步通信,特别凌乱。我打算简单点,直接设定定时器来读和写,读完写,写完读,一次性把所有的数据读或者写完,也许可以解决这个问题。
:
--
FROM 114.245.195.*
因为还可以凑合着用呀,只是不太理想,我也不是专职程序员呀
【 在 z16166 的大作中提到: 】
: 8月份到12月初,还没搞定?
:
--
FROM 113.69.192.*
有几万行代码呢,如果单单是通信代码,可以弄上去。我感觉应该是多线程环境下,三菱的帧结构导致无法异步通信带来的问题。我现在直接定时通信,这样就是简单明了的同步通信,我先试试看。
【 在 hgoldfish 的大作中提到: 】
: 从你的描述看,连 QCoreApplication::processEvents() 都用上了,几乎可以肯定是你的代码有问题。
: 可以弄个最新测试可运行代码,包含 CMakeLists.txt 等工程文件到 github 去。我可以给你诊断一下。
:
--
FROM 113.69.192.*
你把通信相关的代码抽出来啊。
【 在 hengcuiyuan (远航) 的大作中提到: 】
: 有几万行代码呢,如果单单是通信代码,可以弄上去。我感觉应该是多线程环境下,三菱的帧结构导致无法异步通信带来的问题。我现在直接定时通信,这样就是简单明了的同步通信,我先试试看。
--
FROM 110.85.22.*