scared1 发表于 2014-12-21 00:27:51

事件模式无法退出子函数,请大神指正,内有代码

这段代码运行过后,点了开始就关不掉了,请教一下,哪里有问题?#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1)
$Form1 = GUICreate("Form1", 444, 267, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Button1 = GUICtrlCreateButton("开始", 112, 160, 81, 41, 0)
GUICtrlSetOnEvent(-1, "Button1Click")
$Button2 = GUICtrlCreateButton("暂停", 248, 160, 81, 41, 0)
GUICtrlSetOnEvent(-1, "Button2Click")
GUISetState(@SW_SHOW)
While 1
        Sleep(100)
WEnd
Func Button1Click()
        Sleep(900000)
EndFunc
Func Button2Click()
        Exit
EndFunc
Func Form1Close()
Exit
EndFunc

zhouhaijin 发表于 2014-12-21 01:53:37

问题就在Sleep(900000)

scared1 发表于 2014-12-21 01:58:05

什么意思?子函数无法中断吗?有其他办法可以将子函数中断不?

zhouhaijin 发表于 2014-12-21 02:14:47

本帖最后由 zhouhaijin 于 2014-12-21 02:16 编辑

你sleep这么久就是想写死循环的意思吧
消息模式可以自定义函数里再获取消息判断就行。
事件模式,可以用AdlibRegister的方法

也可以用他总结的方法
http://www.autoitx.com/forum.php?mod=viewthread&tid=4175&highlight=%CD%CB%B3%F6

zhouhaijin 发表于 2014-12-21 02:20:29

你要是想自定义函数里就sleep(900000),我想退出应该要等900000毫秒才行。

scared1 发表于 2014-12-21 02:32:50

你上边这种方法就可以在我执行等900000秒的时候直接中断它并退出吗?感谢感谢!

zhouhaijin 发表于 2014-12-21 02:37:09

不能。。。。。。。。。

zhouhaijin 发表于 2014-12-21 02:37:12

不能。。。。。。。。。

zhouhaijin 发表于 2014-12-21 03:01:17

#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1)
GUICreate("form1",200,100)
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")

Local $start=GUICtrlCreateButton("开始",10,30,180,20)
GUICtrlSetOnEvent($start,"_While1")
Local $stop=GUICtrlCreateButton("中止",10,50,180,20)
GUICtrlSetOnEvent($stop, "_exit")

GUISetState (@SW_SHOW)

While 1
Sleep(1000)
WEnd

Func _exit ()
      MsgBox (0,"","退出")
      Exit
EndFunc

Func _While1()
      opt ("GUIOnEventMode",0)
      while 1
                Sleep(100)
                $msg = GUIGetMsg()
                Switch $msg
                        Case $stop
                              _exit ()
                EndSwitch
      WEnd
EndFunc

scared1 发表于 2014-12-21 07:09:29

这段代码可以吗?应该也不行吧

水木子 发表于 2014-12-22 11:35:40

#include <Date.au3>
#include <StaticConstants.au3>

Global $bState = True

GUICreate('计时+时间循环', 300, 200)
GUICtrlCreateLabel('系统时间:', 10, 10, 60, 50)
$Time = GUICtrlCreateLabel(_Now(), 70, 10)

$Label1 = GUICtrlCreateLabel('准备就绪', 10, 60, 280, 50, $SS_CENTER)
GUICtrlSetFont(-1, 15, 800, 0, '楷体_GB2312')

$Button1 = GUICtrlCreateButton('开始', 40, 130, 100, 30)
$Button2 = GUICtrlCreateButton('暂停', 160, 130, 100, 30)
GUISetState()

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit
                Case $Button1
                        $i = 1
                        AdlibRegister('cont', 1000)
                Case $Button2
                        If $bState = True Then
                                AdlibUnRegister('cont')
                                GUICtrlSetData($Label1, '暂停至' & $i & '秒')
                                GUICtrlSetData($Button2, '继续')
                                $bState = False
                        Else
                                $bState = True
                                GUICtrlSetData($Button2, '暂停')
                                AdlibRegister('cont', 1000)
                        EndIf
        EndSwitch
       
        If _Now() <> GUICtrlRead($Time) Then GUICtrlSetData($Time, _Now())
WEnd

Func cont()
        GUICtrlSetData($Label1, '已开始' & $i & '秒')
        $i += 1
EndFunc   ;==>cont

scared1 发表于 2014-12-23 02:35:19

感谢版主支持!

scared1 发表于 2014-12-23 02:40:43

AdlibRegister这一个我用不了……

水木子 发表于 2014-12-23 09:30:01

回复 13# scared1

你的自定义函数带参数?

scared1 发表于 2014-12-26 03:28:48

我就是复制的你的脚本,但是用不了,提示AdlibRegister未定义。
页: [1] 2
查看完整版本: 事件模式无法退出子函数,请大神指正,内有代码