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

[AU3基础] 今天被_SetTime函数害死了

  [复制链接]
发表于 2015-7-19 15:57:49 | 显示全部楼层 |阅读模式
一直有个不好的习惯,UDF里面的函数一般都直接拿来使用,从来懒的去review一下里面的代码,总觉得既然能收录进UDF肯定是经过大量实际使用的。

好了,今天的情况是我写了一个程序,希望23:59:55自动执行一些任务,操作的时候需要处理对方一个类似客户端的程序,里面有服务器的实时时间显示,为了让时间更加精准,我实时从对方的客户端中获取时间,然后通过_SetTime函数同步到本地,if判断语句中通过判断 @houe @min @sec 的值来决定什么时候执行程序,结果意外发生了,23:59:00的时候程序竟然自动执行了,我查看日志,这个时间点电脑的时间竟然是被同步成了 23:59:59,查了N多问题,终于发现问题发生在_SetTime里面:

        DllStructSetData($tSystemTime, 5, $iHour)
        DllStructSetData($tSystemTime, 6, $iMinute)
        If $iSecond > 0 Then DllStructSetData($tSystemTime, 7, $iSecond)

上面是_SetTime函数的代码,如果秒是00,竟然不做处理,我fuck。。。。

也就是说上一秒把本地时间同步成了 23:58:59,当客户端的时间显示 23:59:00的时候,本来也希望将本地时间通过_SetTime函数同步成23:59:00,结果_SetTime函数不处理00秒,只把小时和分钟设置到系统时间,就变成了悲剧的 23:59:59,导致程序自动运行了。。。

哎。。。写这个出来提醒下大家这里有个坑。。。
发表于 2015-7-19 16:26:45 | 显示全部楼层
au3 是免费的,作者维护的精力有限。本来就是当小脚本来用,做高大上的程序当然不适合。
发表于 2015-7-19 17:12:40 | 显示全部楼层
非常感谢 学习了
发表于 2015-7-19 17:31:23 | 显示全部楼层
非常感谢 学习了
发表于 2015-7-19 18:24:10 | 显示全部楼层
很好奇怎么个“死法”,可惜1楼没讲出来啊。
发表于 2015-7-19 18:24:13 | 显示全部楼层
很好奇怎么个“死法”,可惜1楼没讲出来啊。
发表于 2015-7-20 11:12:16 | 显示全部楼层
没看出什么严重性来,呵呵
发表于 2015-7-20 11:54:08 | 显示全部楼层
谢谢提醒,近日我也遇到UDF兼容性问题
http://www.autoitx.com/thread-48822-1-1.html
发表于 2015-7-20 16:57:45 | 显示全部楼层
确实如此,不知为什么要做大于0的判断,可将
If $iSecond > 0 Then DllStructSetData($tSystemTime, 7, $iSecond)直接改为DllStructSetData($tSystemTime, 7, $iSecond)
 楼主| 发表于 2015-7-21 13:55:22 | 显示全部楼层
回复 9# haijie1223

我自己通过逻辑处理了这个问题,至于原来UDF中为什么这么写,我想作者之前一定有他的理由吧。。。没时间去研究也就没直接改UDF
发表于 2015-7-26 11:19:22 | 显示全部楼层
谢谢学习了。。。。。。。。。。。。。。。
发表于 2015-8-14 00:53:19 | 显示全部楼层
看出什么严重性来,呵呵
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-28 20:14 , Processed in 0.296844 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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