加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 23:34:07 所属栏目:大数据 来源:网络整理
导读:最近用AutoIt3写了一个ADSL拨号计时小工具,主要是为了学习AutoIt3。 习惯VB编程,于是采用其OnEvent(事件驱动)模式,即:Opt("GUIOnEventMode",1) 本来定时采用的是: While 1 MainFun() Sleep(1000) ; 间隔 WEnd 很明显,这样做是不准的。本意是一秒执行

最近用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()执行太耗时了?-_-!!!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读