Войти

Показать полную графическую версию : [решено] остановка функции при условии.


yukuru
21-07-2011, 17:36
в коде вызываем функцию, которая будет работать постоянно(через каждый 3 минуты)

AdlibEnable("Timetosleep",180000)

в этой функции есть переменная. например


global $i=0

func Timetosleep()
$i+=1

endfunc


паралельно это функции в "главном" коде программа выполняется какаято другая функция(не столь важно).

Вопрос: как сделать чтобы при достижении скажем $i=5(через 15минут) мы останавливали функцию в "главном" коде, а при $i=6(спустя три минуты после паузы) снова ее возобновляли.

FlatX007
24-07-2011, 15:14
Не знаю, правильно ли я понял :search:

!AutoIt Version: 3.3.6.0

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $i = 0, $begin = 0
Global $iTimeSleep = 3 * 60 ; 3 Минуты

AdlibRegister('_Timetosleep', 180000)
AdlibRegister('_TrackingTimer', 1000)

$Form1 = GUICreate("", 243, 58, 348, 246, BitOR($WS_CAPTION, $WS_POPUP, $WS_BORDER, $WS_CLIPSIBLINGS))
$Button1 = GUICtrlCreateButton("Х", 8, 8, 227, 41, 0)
GUISetState()

Do
Until GUIGetMsg() = $Button1

Func _Timetosleep()

$i += 1
ConsoleWrite('> ' & $i & @CRLF)
If $i = 5 Then
$begin = TimerInit()
AdlibUnRegister('_Timetosleep')
EndIf

EndFunc ;==>_Timetosleep

Func _TrackingTimer()

If $begin > 0 And Round(TimerDiff($begin) / 1000) > $iTimeSleep Then AdlibRegister('_Timetosleep', 180000)

EndFunc ;==>_TrackingTimer

yukuru
25-07-2011, 07:37
реализация знакома и понятна. вотЪ только вопрос- продолжит ли он с местра разЪединения фнкию, или нанет заново

FlatX007
26-07-2011, 00:01
Малец не правильно написал код ...

Функцию _Timetosleep он продолжит, те глобальная переменная $i будет приращиваться (Остановится на 5 ... после паузы 3 минуты будет 6,7,8 ...)

#include <WindowsConstants.au3>

Global $i = 0, $begin = 0, $fTimerOff = False
Global $iTimeSleep = 3 * 60 ; 3 Минуты

AdlibRegister('_Timetosleep', 180000)
AdlibRegister('_TrackingTimer', 500)

$Form1 = GUICreate("", 243, 58, 348, 246, BitOR($WS_CAPTION, $WS_POPUP, $WS_BORDER, $WS_CLIPSIBLINGS))
$Button1 = GUICtrlCreateButton("Х", 8, 8, 227, 41, 0)
GUISetState()

Do
Until GUIGetMsg() = $Button1

Func _Timetosleep()

$i += 1
ConsoleWrite('> ' & $i & @CRLF)
If $i = 5 Then
$begin = TimerInit()
AdlibUnRegister('_Timetosleep')
EndIf

EndFunc ;==>_Timetosleep

Func _TrackingTimer()

If $begin > 0 And Round(TimerDiff($begin) / 1000) > $iTimeSleep And Not $fTimerOff Then
AdlibRegister('_Timetosleep', 180000)
$fTimerOff = True
EndIf

EndFunc ;==>_TrackingTimer




© OSzone.net 2001-2012