怎么在循环外部退出循环[已解决]
本帖最后由 xyyie 于 2010-11-9 10:20 编辑我想实现点击莫个按钮执行以个函数函数内部有循环,然后点击停止按钮结束执行这个函数循环。 本帖最后由 _ddqs. 于 2010-11-8 14:04 编辑
开始按钮 执行: AdlibRegister(" 某个循环函数")
停止按钮 执行: AdlibunRegister(" 某个循环函数")
·可能不好,看下层。。。 本帖最后由 _ddqs. 于 2010-11-8 14:11 编辑
或
Global$exitloop =0
开始按钮 执行: AdlibRegister("某个循环函数")
停止按钮 执行: $exitloop =1
Func 某个循环函数()
循环开始
If $exitloop =1 Then
$exitloop =0
ExitLoop
EndIf
循环结束
...
EndFunc
使用一个全局变量
在循环内部,适当的时候,检查这个变量的量,来决定怎么处理。
或者,在循环外,直接dele这个窗口。 方法有很多种
你可以把按钮做到循环中去~
或者使用GUI OnEvent Mode 对, 在循环内部监测某个变量,这个变量达到条件就退出循环。
然后你设置按下按钮时改变这个变量,让他达到退出循环的条件。 在函数内部加入GUIGetMsg()捕获消息,可参考以下代码。#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Global $Label1, $Button1
$Form1 = GUICreate("示例", 283, 152, 192, 124)
$Label1 = GUICtrlCreateLabel("", 104, 32, 60, 25)
$Button1 = GUICtrlCreateButton("开始", 48, 88, 75, 25)
$Button2 = GUICtrlCreateButton("退出", 152, 88, 75, 25)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $Button2
Exit
Case $Button1
If GUICtrlRead($Button1) = '开始' Then
GUICtrlSetData($Button1, '停止')
Else
GUICtrlSetData($Button1, '开始')
EndIf
_Test()
EndSwitch
WEnd
Func _Test()
Local $i = 0, $nMsg
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $Button2
Exit
Case $Button1
Return False
EndSwitch
GUICtrlSetData($Label1, $i)
$i += 1
WEnd
Return True
EndFunc 谢谢大家了。问题已经解决了。 经过我的测试 在函数内部加入GUIGetMsg()捕获消息 可以实现退出循环
但是反映有点慢
使用全局变量好像不行。 正要解决类似的问题,学习啦 但是我想,不管什么时候,只要点击退出,就马上退出,有方法实现吗?
比如在Func start_click()
While 1
Sleep(1000)
WEnd
EndFunc
Func stop_click()
MsgBox(0,"asdf","asdf")
EndFunc个程序中,我想不管什么时候,只要一点击stop_click(),程序就马上执行,而不是等那个sleep(1000)执行完毕 回复 11# changwang
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 438, 192, 124)
$Edit1 = GUICtrlCreateEdit("", 32, 24, 545, 201)
$Button1 = GUICtrlCreateButton("start_click", 104, 256, 121, 41)
$Button2 = GUICtrlCreateButton("stop_click", 328, 256, 121, 41)
$hButton = GUICtrlGetHandle($Button2)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
;===============================================
Global $num, $Paused, $stop = False
HotKeySet("{PAUSE}", "AutoIt_Pause")
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
;===============================================
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
start_click()
EndSwitch
WEnd
Func start_click()
$stop = False
While 1
Sleep(100)
GUICtrlSetData($Edit1, $num & @CRLF, 1)
$num += 1
If $stop Then ExitLoop;也可以是Return
WEnd
GUICtrlSetData($Edit1, '$stop = ' & $stop & @CRLF, 1)
GUICtrlSetData($Edit1, '该函数已经退出', 1)
EndFunc ;==>start_click
Func AutoIt_Pause()
$stop = True
EndFunc ;==>AutoIt_Pause
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
$iCode = BitShift($iwParam, 16)
Switch $ilParam
Case $hButton
If $iCode = $BN_CLICKED Then $stop = True
EndSwitch
EndFunc ;==>WM_COMMAND
这里有一个较为理想的方法 回复 12# athland5013
多谢啦,哈哈 回复 5# gapkiller
可以给个例子吗? 回复 6# foboy
理论上不错,我有小小明白,不过,能不能给个例子呢?
页:
[1]
2