yuko4632 发表于 2014-8-22 20:36:36

注册多个AdlibRegister函数执行问题

本帖最后由 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

user3000 发表于 2014-8-22 20:44:35

本帖最后由 user3000 于 2014-8-22 20:46 编辑

回复 1# yuko4632

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

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

主循环,建议不使用空循环,应该至少插入适当的延迟:sleep(...)
这样才会降低程序对CPU的占用.

yuko4632 发表于 2014-8-22 23:34:48

_B如果不用循环函数就不能达到效果。
纠结,除非用多线程吗?

www378660084 发表于 2014-8-23 10:10:30

回复 3# yuko4632

你是隔300ms调用一次,难道你想隔300ms创建一个while循环?

user3000 发表于 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

wangms 发表于 2014-9-10 23:21:00

前来学习。。。。。。。。。。。。。。。。。。。。。。。。

tvzml 发表于 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 就失去 定时器的意义了

sdc7 发表于 2014-9-12 14:39:36

哎·····注意 AdlibRegister 不是多线程·
程序还事只有一个人在执行,AdlibRegister 的功能只是定时的问下这个人 这会帮我擦屁屁可以不? 这个人没被累死没忙就帮你擦了····仅此而已··

f4李文杨 发表于 2014-9-12 16:35:31

AdlibRegister 不能有提示函数之类的!不过你可以当 AdlibRegister 这个做循环用!与注销一起用!效果就不一样了!
页: [1]
查看完整版本: 注册多个AdlibRegister函数执行问题