找回密码
 加入
搜索
查看: 9769|回复: 9

[系统综合] 注册多个AdlibRegister函数执行问题

  [复制链接]
发表于 2014-8-22 20:36:36 | 显示全部楼层 |阅读模式
本帖最后由 yuko4632 于 2014-8-22 20:38 编辑

注册多个AdlibRegister,发现A不能执行下去。B能正常执行。
这种情况该怎么解决?

#include <Date.au3>
AdlibRegister("_A",100)
AdlibRegister("_B",300)

While 1        
WEnd

Func _A()
    ConsoleWrite("输出A" &@LF)
    MsgBox(48, "A!", "A错误。", 15)
EndFunc 

Func _B()
$sNewDate2 = _DateAdd('s', 5, _NowCalc()) ;定义运行周期
    While 1
        Sleep(1000)
         $nowdate = _NowCalc() ;获取当前时间
         If $nowdate = $sNewDate2 Then
               ConsoleWrite("输出B" &@LF)
                       MsgBox(48, "B!", "B错误。", 15)
        $sNewDate2 = _DateAdd('s', 5, _NowCalc()) ;重新定义运行周期,以进行下次任务
        EndIf
     WEnd
EndFunc 
发表于 2014-8-22 20:44:35 | 显示全部楼层
本帖最后由 user3000 于 2014-8-22 20:46 编辑

回复 1# yuko4632

msgbox inputbox 等阻断型函数会让整个程序停滞下来;
所以注册函数时,不应该在其内包含这类函数.

B函数又有个无限循环,程序已经"死"在这里头了;自然无法执行其他语句.

主循环,建议不使用空循环,应该至少插入适当的延迟:sleep(...)
这样才会降低程序对CPU的占用.
 楼主| 发表于 2014-8-22 23:34:48 | 显示全部楼层
_B如果不用循环函数就不能达到效果。
纠结,除非用多线程吗?
发表于 2014-8-23 10:10:30 | 显示全部楼层
回复 3# yuko4632

你是隔300ms调用一次,难道你想隔300ms创建一个while循环?
发表于 2014-8-23 12:36:00 | 显示全部楼层
回复 3# yuko4632
AdlibRegister 注册的函数本来就可以实现"无限循环"的效果.
你代码稍稍修改一下:
Global $sNewDate2 = _DateAdd('s', 5, _NowCalc()) ;定义运行周期
AdlibRegister("_B",1000)
;......
Func _B()
$nowdate = _NowCalc()
If $nowdate = $sNewDate2 Then
   ConsoleWrite("输出B" &@LF)
        ; MsgBox(48, "B!", "B错误。", 15)
   $sNewDate2 = _DateAdd('s', 5, _NowCalc()) ;重新定义运行周期,以进行下次任务
EndIf
EndFunc
发表于 2014-9-10 23:21:00 | 显示全部楼层
前来学习。。。。。。。。。。。。。。。。。。。。。。。。
发表于 2014-9-12 13:18:35 | 显示全部楼层
本帖最后由 tvzml 于 2014-9-12 13:24 编辑

AdlibRegister 间隔时间建议 不小于300 ,100的话,肯定是不会执行其他调用了,整个程序会被 100调用的优先占用 ,其他压根就不执行了,这就是优化程序的敲门了,程序的优先处理 ,以及尽量不使用 sleep 和 MsgBox 等导致 暂停的 语句为好。
楼主犯了多个大忌 ,调用里面使用 While 1  这个内循环 无意义,完全可以 前面的 While 1 来担当 ,调用里面 的sleep 直接暂停了整个程序,AdlibRegister 100 和 AdlibRegister 300 就失去 定时器的意义了
发表于 2014-9-12 14:39:36 | 显示全部楼层
哎·····注意 AdlibRegister 不是多线程·
程序还事只有一个人在执行,AdlibRegister 的功能只是定时的问下这个人 这会帮我擦屁屁可以不? 这个人没被累死没忙就帮你擦了····仅此而已··
发表于 2014-9-12 16:35:31 | 显示全部楼层
AdlibRegister 不能有提示函数之类的!不过你可以当 AdlibRegister 这个做循环用!与注销一起用!效果就不一样了!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-29 13:50 , Processed in 0.078647 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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