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

前端之家收集整理的这篇文章主要介绍了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","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()执行太耗时了?-_-!!!

猜你在找的VB相关文章