axis000 发表于 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 编辑 ]

javarike 发表于 2009-3-12 08:58:09

Func PLAY()
   While 1
      不断循环的内容...... //建议这里SLEEP一下,这样很卡的.....至少SLEEP(100)啊..
      WEnd
EndFunc

KiwiCsj 发表于 2009-3-12 09:30:46

原帖由 axis000 于 2009-3-12 08:41 发表 http://www.autoitx.com/images/common/back.gif
刚才发错地方了,现重发一次,见谅!
代码如下:
#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函数……

想找到更好的方法……

javarike 发表于 2009-3-12 09:35:21

au3的线程处理可以说是差的很那....哎``.

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

没空管其他函数的死活了...

sxd 发表于 2009-3-12 09:52:58

把PLAY放到主体中 这样可以响应一个函数

设置一个开关来控制PLAY

axis000 发表于 2009-3-12 11:50:55

楼上的能说的更详细些吗?

axis000 发表于 2009-3-12 11:52:29

三楼的方法也可以,但是如果我想加暂停按钮就麻烦了.

KiwiCsj 发表于 2009-3-12 13:03:50

原帖由 axis000 于 2009-3-12 11:52 发表 http://www.autoitx.com/images/common/back.gif
三楼的方法也可以,但是如果我想加暂停按钮就麻烦了.



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

#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

axis000 发表于 2009-3-12 13:10:27

谢谢,辛苦了!!:face (38):
页: [1]
查看完整版本: 关于循环如何跳出的问题?