找回密码
 加入
搜索
查看: 1715|回复: 9

关于循环如何跳出的问题?

[复制链接]
发表于 2009-3-12 08:41:39 | 显示全部楼层 |阅读模式
刚才发错地方了,现重发一次,见谅!
代码如下:
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)  ; 切换为 OnEvent 模式
$mainwindow = GUICreate("测试程序",125,50) ; 创建窗口并返回窗口句柄
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked") ; 设置窗口关闭事件
$playbutten = GUICtrlCreateButton("开始", 30,12,65)
GUICtrlSetOnEvent($playbutten, "PLAY")
GUISetState(@SW_SHOW)

While 1
  Sleep(1000)  ; 不做任何事
WEnd

Func PLAY()
     While 1
      不断循环的内容......
      WEnd
EndFunc

Func CLOSEClicked()
  Exit
EndFunc

当我点完开始按钮后,就怎么也关不掉了,该怎么办呢?

[ 本帖最后由 axis000 于 2009-3-12 13:15 编辑 ]
发表于 2009-3-12 08:58:09 | 显示全部楼层
Func PLAY()
     While 1
      不断循环的内容...... //建议这里SLEEP一下,这样很卡的.....至少SLEEP(100)啊..
      WEnd
EndFunc
发表于 2009-3-12 09:30:46 | 显示全部楼层
原帖由 axis000 于 2009-3-12 08:41 发表
刚才发错地方了,现重发一次,见谅!
代码如下:
#include
Opt("GUIOnEventMode", 1)  ; 切换为 OnEvent 模式
$mainwindow = GUICreate("测试程序",125,50) ; 创建窗口并返回窗口句柄
GUISetOnEvent($GUI_EVENT_C ...



个人也不是很理解,只能自我解释为:由于是单线程,所以在连续的循环中,au3腾不出手来做第二件事吧。
我的处理办法是在循环中加以额外的退出条件,添补后的代码如下:


#include <GUIConstants.au3>
#Include <Misc.au3>
Opt("GUIOnEventMode", 1)  ; 切换为 OnEvent 模式 
Global $ta=0
$mainwindow = GUICreate("测试程序",125,50) ; 创建窗口并返回窗口句柄
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked") ; 设置窗口关闭事件
$playbutten = GUICtrlCreateButton("开始", 30,12,65)
GUICtrlSetOnEvent($playbutten, "PLAY")
GUISetState(@SW_SHOW)

While 1
        Sleep(1000)  ; 不做任何事
WEnd

Func PLAY()
        While 1
                If _IsPressed("1B") Then        ;ESC退程序
                        Exit
                EndIf
                ;不断循环的内容......
                $ta+=1
                ConsoleWrite($ta&" ")
                Sleep(100)
        WEnd
EndFunc

Func CLOSEClicked()
        Exit
EndFunc
发表于 2009-3-12 09:31:40 | 显示全部楼层
关注中,我也是这个问题啊……

我加了个AdlibEnable函数……

想找到更好的方法……
发表于 2009-3-12 09:35:21 | 显示全部楼层
au3的线程处理可以说是差的很那....哎``.

很明显是一个死循环了..

没空管其他函数的死活了...
发表于 2009-3-12 09:52:58 | 显示全部楼层
把  PLAY放到主体中 这样可以响应一个函数

设置一个开关来控制PLAY
 楼主| 发表于 2009-3-12 11:50:55 | 显示全部楼层
楼上的能说的更详细些吗?
 楼主| 发表于 2009-3-12 11:52:29 | 显示全部楼层
三楼的方法也可以,但是如果我想加暂停按钮就麻烦了.
发表于 2009-3-12 13:03:50 | 显示全部楼层
原帖由 axis000 于 2009-3-12 11:52 发表
三楼的方法也可以,但是如果我想加暂停按钮就麻烦了.




要暂停就在其中再加循环嵌套。修改后的代码如下:

#include <GUIConstants.au3>
#Include <Misc.au3>
Opt("GUIOnEventMode", 1)  ; 切换为 OnEvent 模式 
Global $ta=0
$mainwindow = GUICreate("测试程序",125,50) ; 创建窗口并返回窗口句柄
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked") ; 设置窗口关闭事件
$playbutten = GUICtrlCreateButton("开始", 30,12,65)
GUICtrlSetOnEvent($playbutten, "PLAY")
GUISetState(@SW_SHOW)
 
While 1
    Sleep(1000)  ; 不做任何事
WEnd
 
Func PLAY()
    While 1
        If _IsPressed("1B") Then    ;ESC退程序
            Exit
        EndIf
        If _IsPressed("73") Then    ;F4暂停
                        Do
                                Sleep(100)
                        Until _IsPressed("74")        ;F5继续
        EndIf
        ;不断循环的内容......
        $ta+=1
        ConsoleWrite($ta&" ")
        Sleep(100)
    WEnd
EndFunc
 
Func CLOSEClicked()
    Exit
EndFunc
 楼主| 发表于 2009-3-12 13:10:27 | 显示全部楼层
谢谢,辛苦了!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-18 22:11 , Processed in 0.077439 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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