找回密码
 加入
搜索
查看: 5317|回复: 11

[网络通信] [已解决]AU3的UDPRecv命令为何执行起来有100ms延迟?

  [复制链接]
发表于 2011-6-12 00:36:56 | 显示全部楼层 |阅读模式
本帖最后由 曼菲士 于 2011-7-2 10:09 编辑

$UDPBuff = UDPRecv($UDPBind, 2048, 1)        ;读取接收缓冲区

这一条命令耗费大概100ms左右的时间,请问其他朋友也是这样吗?
发表于 2011-6-27 18:36:25 | 显示全部楼层
你的循环里有个SLEEP(100) 当然要延时了
 楼主| 发表于 2011-6-27 23:34:11 | 显示全部楼层
你可以试试
while 1
   $UDPBuff = UDPRecv($UDPBind, 2048, 1)
wend
你加个测试时间的代码看会有多少延迟.
发表于 2011-6-27 23:58:35 | 显示全部楼层
回复 3# 曼菲士
我的是14sm ,既然是读自然要耗费时间了,请问有代码执行不需要时间的吗
 楼主| 发表于 2011-6-28 11:40:39 | 显示全部楼层
本帖最后由 曼菲士 于 2011-6-28 11:42 编辑

也许是我说得不够清楚吧,我写了一个C/S软件,客户端和服务端用TCP传送数据,用UDP来接收指令,但是客户端的菜单操作非常缓慢,点操作都会延迟100ms左右,例如打开窗口,点击按钮都会有明显停顿感觉,当注解了$UDPBuff = UDPRecv($UDPBind, 2048, 1)后马上正常,点任何操作都很快,经过Timerini和Timerdiff检测,延迟有100ms左右,当注解那行代码后,延迟恢复到了几ms正常水平,只是有点疑问,怎么会有那么大延迟,这可不是UDF,是内部命令,是我的AutoIT3.3.6.1问题吗?
发表于 2011-6-28 12:29:30 | 显示全部楼层
回复 5# 曼菲士
具体来讲,应该不叫延迟,而是该代码耗费的时间。
UDPRecv($UDPBind, 2048, 1)的意思是从已经连接的套接字里面接收,最多2048个字符的数据,并且返回为2进制数。
这里面应该是有多步操作吧,光转换为2进制,可能就要花一段时间呢。
LZ试着将UDPRecv($UDPBind, 2048, 1)改为UDPRecv($UDPBind, 512, 1),
看看是不是耗费的时间减少了?这样判断一下是不是这个函数本身就会耗费时间。
 楼主| 发表于 2011-6-28 14:48:41 | 显示全部楼层
别说512,我50都试过了,楼上朋友请注意,我是说,当我去掉那句代码后,就只有几ms延迟而已了,如果硬要说是耗费,这句代码耗费可是我见过最多的,可以达到废弃不用的程度,没有哪个程序能忍受这么多的耗费时间。
发表于 2011-6-30 13:12:12 | 显示全部楼层
UDP协议在收到数据包以后要回发一个数据包确认数据包已收到
封包和收包都要耗费时间
接收数据后转换也要耗费时间
这么一执行下来当然有延迟了
发表于 2011-6-30 13:43:09 | 显示全部楼层
回复 8# xrzmjz
那是TCP,UDP不需要回包确认。
不过封包和收包都要耗费时间,接收数据后转换也要耗费时间 这是肯定的
 楼主| 发表于 2011-7-2 10:08:27 | 显示全部楼层
我去掉UDP那句代码后改用TCP来代替,延迟就只有几ms了,发这帖只是想知道是不是大家的UDP也有这个问题而已。

我最终用TCP来发送和接收指令和数据了,如果用UDP在后台等待指令,那是个恶梦。
发表于 2011-7-2 11:47:03 | 显示全部楼层
好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊
发表于 2012-11-6 11:07:34 | 显示全部楼层
驱动智能选择v2.2 Final
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-11 04:06 , Processed in 0.106012 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表