找回密码
 加入
搜索
查看: 9021|回复: 14

[GUI管理] Autoit编GUI界面,为什么须要一个sleep,否则一闪即逝?

 火.. [复制链接]
发表于 2014-1-26 13:18:12 | 显示全部楼层 |阅读模式
本帖最后由 vigiles 于 2014-1-26 13:21 编辑
;函数Opt:更改GUI的交互模式为事件模式。Opt即AutoItSetOption简写
Opt("GUIOnEventMode", 1) ; 0=禁用事件模式, 1=启用事件模式

;隐藏右下角图标
Opt("TrayIconHide", 1)

;定义窗口关闭消息的值。-3为点击关闭按钮返回的固定值,$GUI_EVENT_CLOSE是个专用的窗口事件ID,表示关闭
Global Const $GUI_EVENT_CLOSE = -3

;变量$mainGUI:对窗体的引用,GUI函数GUICreate:创建一个窗口 默认居中显示(标题,宽, 高)
$mainGUI = GUICreate ( " 我的第一个窗口 " )

;GUI函数GUICtrlSetOnEvent:给窗体添加事件(窗体事件ID,处理方法)
GUISetOnEvent($GUI_EVENT_CLOSE, "funcGUI")

;变量$btn:对按钮的引用,函数GUICtrlCreateButton:创建一个按钮(文本,)
$btn = GUICtrlCreateButton("确定", 70, 50, 60)

;GUI函数GUICtrlSetOnEvent:给按钮添加事件(按钮,处理方法)
GUICtrlSetOnEvent($btn, "funcGUI")

;GUI函数GUISetState:指定窗体显示(显示宏,窗体)
GUISetState(@SW_SHOW, $mainGUI)

;下面这个死循环为何是必须的?
#comments-start
While 1
    Sleep(1000) ; 休眠(毫秒), 以降低 CPU 使用率
WEnd
#comments-end

;关键字Func:定义一个方法
Func funcGUI()
        ;使用宏@GUI_CtrlId来判断消息来源于控件ID或系统事件ID
        Switch @GUI_CtrlId
                ;固定ID存储窗体关闭返回值
        Case $GUI_EVENT_CLOSE
                        Exit
                Case $btn
                        MsgBox(0, "GUI按钮事件", "你点击了 '确定' 按钮!")
        EndSwitch
EndFunc

这里没有使用#include <GUIConstantsEx.au3>

请问这个死循环起什么作用?当没有这个死循环时并未发生交互事件,为何窗体关闭了?
发表于 2014-1-26 18:06:35 | 显示全部楼层
如果没有那个循环,代码执行到此处已是结尾,就会退出;窗体就是因程序退出而给关闭了。
发表于 2014-1-26 18:19:55 | 显示全部楼层
执行这个循环就是让窗体暂停等待状态, Sleep可以没有。
 楼主| 发表于 2014-1-26 19:29:16 | 显示全部楼层
如果没有那个循环,代码执行到此处已是结尾,就会退出;窗体就是因程序退出而给关闭了。
user3000 发表于 2014-1-26 18:06
执行这个循环就是让窗体暂停等待状态, Sleep可以没有。
fuldho 发表于 2014-1-26 18:19

++++++++++++++++++++++++++++++++++++++++++
代码结尾并没有“Exit”或者“GUIDelete”等命令啊?难道执行了我自定义的“funcGUI”方法,在Exit时退出的?
不太明白Autoit的运行机制啊
发表于 2014-1-26 23:44:35 | 显示全部楼层
简单来说,就是从代码的第一行开始解释执行,如果没有while循环,就直接逐句解释完,然后退出。
发表于 2014-1-27 08:47:15 | 显示全部楼层
代码从第一条执行到最后一条。如果没有循环语句则执行完毕后自动关闭。。。。
发表于 2014-1-27 11:07:53 | 显示全部楼层
不需要这个 sleep
发表于 2014-2-6 22:30:08 | 显示全部楼层
嗯,不知道是不是可以这样理解,以后一般的GUI想要一直显示的话,都添加一个While循环对么?
发表于 2014-2-8 14:07:12 | 显示全部楼层
原来如此,看明白了
发表于 2014-2-13 03:41:58 | 显示全部楼层
回复 1# vigiles
在这类的情况下,建议删除sleep,以免程序迟缓!
发表于 2014-3-11 15:23:30 | 显示全部楼层
sleep可以减少系统资源的耗费
发表于 2014-3-11 15:26:06 | 显示全部楼层
回复 3# fuldho


    Sleep如果没有CPU占用率会变得极高。至少Sleep(1)
发表于 2014-3-11 15:27:39 | 显示全部楼层
回复 4# vigiles


    脚本按照从上至下的方式执行,最末行默认有一个Exit。自定义函数不算,自定义函数只有被调用时才会被运行。如果你不理解,其实是因为你在初学阶段(单指AU3,看楼主有其他基础)就是用了事件响应模式,而不是消息循环模式。
 楼主| 发表于 2014-3-11 16:40:27 | 显示全部楼层
回复  vigiles


    脚本按照从上至下的方式执行,最末行默认有一个Exit。自定义函数不算,自定义函数 ...
skyfree 发表于 2014-3-11 15:27



    谢谢,现在理解了
发表于 2014-3-21 19:18:31 | 显示全部楼层
刚开始学的时候我也有过这个疑惑,呵呵
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-22 05:37 , Processed in 0.076363 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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