首页| 论坛| 消息

标题:connect(timer,SIGNAL(timeout()),&loop,SLOT(quit()));是什么用途
作者:岭南小菜
日期:2019-04-28 13:14
内容:

void Reader::socketReadyRead(){QEventLoop loop;QTimer timer;connect(&timer,SIGNAL(timeout()),&loop,SLOT(quit()));timer.start(50);loop.exec();QByteArray reply(socket->readAll());readLine(reply);}请问上面代码是什么意思?从字面意思来看,启动定时器,每50ms执行一次QEventLoop 的quit槽函数。这个什么含义呢?这个函数的功能是,socket发送指后,读取server的返回数据。为什么要每50ms执行一次QEventLoop 的quit槽函数。如果把上面的代码注释掉,socket读取的数据不完整,不知道上面代码的精髓,还请大家指教!!!!!


#1 [青空飞羽 04-28 14:02]
整体用途就是: 延迟等待50ms接收socket上的数据
QEventLoop 事件循环,loop.exec()执行后会阻塞程序,50ms后定时器事件触发调用loop.quit退出事件循环,程序继续往后执行,接收socket上的数据。
#2 回 青空飞羽 的帖子 [岭南小菜 04-28 14:37]
青空飞羽:整体用途就是: 延迟等待50ms接收socket上的数据
QEventLoop 事件循环,loop.exec()执行后会阻塞程序,50ms后定时器事件触发调用loop.quit退出事件循环,程序继续往后执行,接收socket上的数据。 (2019-04-28 14:02) 
把上面的注释掉,接收的数据不完整,这个怎么理解?
#3 回 岭南小菜 的帖子 [青空飞羽 04-28 14:47]
岭南小菜:把上面的注释掉,接收的数据不完整,这个怎么理解? (2019-04-28 14:37) 
那可能是发送端数据还没发送完全,所以接收端需要延迟等待50ms保证数据完整
#4 [岭南小菜 04-28 14:59]
谢谢你的回复。
#5 [liulin188 04-28 17:51]
我一直有个以为,QEventLoop 在用于实现异步阻塞的时候,
exec()会不会后执行呢,

<< 1 2 >> (1/2)

回复 发表
主题 版块