AUTOIT3的OnEvent(事件驱动)模式一处BUG?

最近用AutoIt3写了一个ADSL拨号计时小工具,主要是为了学习AutoIt3。

习惯VB编程,于是采用其OnEvent(事件驱动)模式,即:Opt("GUIOnEventMode", 1)

 

本来定时采用的是:

While 1

MainFun()

Sleep(1000)  ; 间隔

WEnd

很明显,这样做是不准的。本意是一秒执行一次MainFun(),变成执行MainFun()后间隔一秒了。

于是在网上找到一个范例:AutoIT中多定时器用法实例。参照之,

While 1

$msg =  GuiGetMsg()

Select

Case  $msg =  $GUI_EVENT_CLOSE

DllCall("user32.dll",  "int",  "KillTimer",  "hwnd",  0,  "uint",  $uiTimer[0])

DllCallbackFree ($pTimerProc)

Exit

Case  Else

;;;

EndSelect

WEnd

 

Func _TimerProc($hWnd,  $uiMsg,  $idEvent,  $dwTime)

Switch  $idEvent

Case  $uiTimer[0]

MainFun()

Case  Else

EndSwitch

EndFunc

改完运行,OK。。。

 

可无意间发现该程序执行时CPU占有50%!!还好我是T5500的,不然早当机了。开始怀疑是AutoIt3执行效率问题,再怀疑是自己的脚本些的效率太低,于是注销所有有效代码,仅仅执行:

While 1

;;;

WEnd

可CPU还是50%!!

凭直觉,认为是代码用的有问题。比较范例,发现就是我的采用了OnEvent(事件驱动),而它是默认消息循环模式,试着注销Opt("GUIOnEventMode", 1),CPU使用果然只有1%不到!看来这一句的确和范例采用的定时方法“相斥”!

无奈之下,只好乖乖使用:

While 1

MainFun()

Sleep(1000)  ; 间隔

WEnd

 

改天再研究问题本质吧!

 

PS:其实就算采用范例的定时,一样的不准。一分钟下来能慢1秒……也许是MainFun()执行太耗时了?
-_-!!!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值