Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] остановка функции при условии. (http://forum.oszone.net/showthread.php?t=211634)

yukuru 21-07-2011 17:36 1717292

остановка функции при условии.
 
в коде вызываем функцию, которая будет работать постоянно(через каждый 3 минуты)

Код:

AdlibEnable("Timetosleep",180000)
в этой функции есть переменная. например

Код:

global $i=0

func Timetosleep()
$i+=1

endfunc

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

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

FlatX007 24-07-2011 15:14 1718908

Не знаю, правильно ли я понял :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 1719230

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

FlatX007 26-07-2011 00:01 1719859

Малец не правильно написал код ...

Функцию _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



Время: 20:15.

Время: 20:15.
© OSzone.net 2001-