找回密码
 加入
搜索
查看: 8999|回复: 19

[AU3基础] 怎么中断一个sleep

 火.. [复制链接]
发表于 2012-4-21 13:02:33 | 显示全部楼层 |阅读模式
比如,GUI的OnEvent模式,子函数中含有延迟。这样,若子函数的延迟比较大,点击按钮的时候,要怎么中断Sleep呢?
 楼主| 发表于 2012-4-21 13:03:41 | 显示全部楼层
就是说,让点击按钮的响应速度,不会因子函数的sleep而受到影响。
发表于 2012-4-21 14:34:51 | 显示全部楼层
小弟觉得   SLEEP时   可以用  热键来执行想要的操作
发表于 2012-4-21 14:51:39 | 显示全部楼层
楼主的意思仍然在sleep中,点击控件时马上执行对应的操作吗?  这应该属于多线程的范畴了
发表于 2012-4-21 16:06:26 | 显示全部楼层
将sleep值改小,然后利用循环达到所需时间,循环中判断呢
发表于 2012-4-21 17:50:18 | 显示全部楼层
sleep好像全局停止响应,中断不了
发表于 2012-4-21 19:01:43 | 显示全部楼层
这个真不清楚 没测试过
发表于 2012-4-21 19:41:35 | 显示全部楼层
中断不了吧,和WHILE一样!
发表于 2012-4-21 19:47:18 | 显示全部楼层
本帖最后由 Qokelate 于 2012-4-21 19:48 编辑

很明显的程序设计问题
与其思考如何打断Sleep还不如多想想,是否真的需要Sleep?没Sleep真的不行吗?必须Sleep这么长时间吗?
表示从不使用超过Sleep300的飘过,

PS: Onevent模式时候,除了主循环,几乎不需要Sleep

评分

参与人数 3金钱 +29 收起 理由
星雨朝霞 + 10 我很赞同
auto + 9 我很赞同
tryhi + 10 赞同

查看全部评分

发表于 2012-4-21 21:43:54 | 显示全部楼层
本帖最后由 298311657 于 2012-4-21 21:50 编辑

程序设计问题
发表于 2012-4-21 22:05:05 | 显示全部楼层
回复 9# Qokelate
我觉得应该还是au3不支持多线程的问题,因为不仅仅是sleep影响了按钮响应速度,如果某段代码执行本身需要很长的时间,但是GUI又有了其他的事件,只能是显示“程序没有响应”
 楼主| 发表于 2012-4-21 23:40:34 | 显示全部楼层
回复 5# kevinch


     好主意,利用循环来达到延迟时间,我试试
发表于 2012-4-22 00:02:58 | 显示全部楼层
回复 11# xms77


    如果是执行功能代码时间过长或无法确定的时候应该给予使用者适当提示或禁止用户对界面进行更改,方法是人想的,多优化思维和代码,就能提高不少的效率

这是我的一个例子,因为不同机器修改计算名时间不同,所以执行时候就把界面隐藏了,防止用户进行更改http://www.autoitx.com/thread-30946-1-1.html

评分

参与人数 1金钱 +20 收起 理由
xms77 + 20 受教了。

查看全部评分

发表于 2012-4-22 14:20:33 | 显示全部楼层
尽量不要使用SLEEP功能,在写GUI的时候
发表于 2012-4-23 15:10:20 | 显示全部楼层
回复 1# zuiyi

试试用AdlibRegister和AdlibUnRegister代替Sleep.
不一定能用,这个看你代码怎么写.
#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
        Local $parent1, $ok1, $cancel1

        Opt("GUICoordMode", 2)
        Opt("GUIResizeMode", 1)
        Opt("GUIOnEventMode", 1)

        $parent1 = GUICreate("父窗 1")
        GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
        GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents")
        GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents")

        $ok1 = GUICtrlCreateButton("确定", 10, 30, 50)
        GUICtrlSetOnEvent(-1, "OKPressed")

        $cancel1 = GUICtrlCreateButton("删除", 0, -1)
        GUICtrlSetOnEvent(-1, "CancelPressed")

        GUISetState(@SW_SHOW)

        ; 仅虚度时光
        While 1
                Sleep(10)
        WEnd

EndFunc   ;==>Example

Func OKPressed()
        SplashTextOn("标题", "文本")
        AdlibRegister("_Sleep", 5000)
EndFunc   ;==>OKPressed

Func CancelPressed()
        SplashOff()
        AdlibUnRegister("_Sleep")
EndFunc   ;==>CancelPressed

Func SpecialEvents()
        If @GUI_CtrlId = $GUI_EVENT_CLOSE Then Exit
EndFunc   ;==>SpecialEvents

Func _Sleep()
        SplashOff()
        AdlibUnRegister("_Sleep")
EndFunc   ;==>_Sleep
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-18 21:16 , Processed in 0.084795 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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