- 主题:请教socket编程如何保证响应的时效性
你是没有理解该怎么用 while。readyRead 里当然是不能用 processEvent 的。
while(data = xxx.readAll(), !data.isEmpty() )
{
doSomething(data);
}
【 在 hengcuiyuan 的大作中提到: 】
: 用while我也想过,这就要设置超时,我看手册上又说响应readyRead信号的槽函数里面不能用processEvent,这个超时又该如何设置呢?我又怎么知道什么时候所有信息读完了呢?
:
--
FROM 120.244.156.*
最新的6.3.0
QNetworkReply::finished 信号
【 在 hengcuiyuan 的大作中提到: 】
: 看来都是踩过坑的,哈哈。你用的是qt的哪个版本,finished的是什么意思,信号还是函数? 我看qt5现在给的异步通信的例子,是用QDataStream里面的事务来接收数据的,说数据包没有到齐的时候可以回退,然后等待新的readyRead信号,我采用他的示范方案来试试看。
--
FROM 114.95.244.*
这个成熟度如何了,能在生产环境用吗?我倒是真有coroutine这种需求
【 在 hgoldfish 的大作中提到: 】
: 哈哈。大魔王来看看我弄的那个 qtng.org 吧。
--
FROM 114.95.244.*
还有一个问题。既然读取网络数据不在主线程中,就不应该用readyRead,而是应该用 waitForReadyRead。
Qt 文档写的很清楚:
This function can operate without an event loop. It is useful when writing non-GUI applications and when performing I/O operations in a non-GUI thread.
【 在 hengcuiyuan 的大作中提到: 】
: qt搞通信是有点难度。研究了一下,可能是readyRead信号的触发问题,我是多线程环境,如果readyRead信号触发了槽函数的执行,而在槽函数未执行完时,又有新的数据到来,好像不会再触发readRead信号,然后我就永远无法读到那后半部分到来的数据了,然后程序就会报通信超时。
:
--
修改:dormouseBHU FROM 120.244.156.*
FROM 120.244.156.*
考虑实效性就不要用qt自带的通讯,简单做做通讯还行
【 在 hengcuiyuan (远航) 的大作中提到: 】
: 用qt的socket,不知道是qt函数库的问题呢,还是什么问题,通信的时效性无法保证。但听过侦听网络数据包发现从对方读取数据,对方的响应很快,基本在5ms以内就有答复,但是我的应用程序却无法保证在100ms内获取到对方的应答,有的时候可以,有的时候不行。此外,debug版本和release版本的表现也不一样,qt4和qt5编译出来的程序的表现也不一样。感觉进入了一个大坑!
: --
:
:
--
FROM 123.123.40.*
你都多线程了,应该复杂操作扔给线程去干,而不是在槽函数里干复杂操作浪费计算资源。
【 在 hengcuiyuan 的大作中提到: 】
: qt搞通信是有点难度。研究了一下,可能是readyRead信号的触发问题,我是多线程环境,如果readyRead信号触发了槽函数的执行,而在槽函数未执行完时,又有新的数据到来,好像不会再触发readRead信号,然后我就永远无法读到那后半部分到来的数据了,然后程序就会报通信超时。
:
--
FROM 125.37.212.*
噢,您已经用了最新的qt了,我还在用qt5.15
【 在 missdeer 的大作中提到: 】
: 最新的6.3.0
: QNetworkReply::finished 信号
--
FROM 45.78.57.*
这是阻塞模式吧,我想用非阻塞模式。
【 在 dormouseBHU 的大作中提到: 】
: 还有一个问题。既然读取网络数据不在主线程中,就不应该用readyRead,而是应该用 waitForReadyRead。
: Qt 文档写的很清楚:
: This function can operate without an event loop. It is useful when writing non-GUI applications and when performing I/O operations in a non-GUI thread.
: ...................
--
FROM 45.78.57.*
没有复杂操作,只是接受个数据而已,现在的问题是数据都接受不全。
【 在 clyu1981 的大作中提到: 】
: 你都多线程了,应该复杂操作扔给线程去干,而不是在槽函数里干复杂操作浪费计算资源。
--
FROM 45.78.57.*
感觉不太可能啊?
其它事件函数也没有耗费时间比较长的?
【 在 hengcuiyuan 的大作中提到: 】
: 没有复杂操作,只是接受个数据而已,现在的问题是数据都接受不全。
:
--
FROM 125.37.212.*