Что нового

Как "заморозить" значение счётчика, с последующим отсчётом с этого значения?

agikon

Знающий
Сообщения
789
Репутация
17
Помогите пожалуйста, как зафиксировать значение счётчика, а потом когда надо продолжить с этого значения?

Код:
$time1 = TimerInit()
;---начало кода 1
	sleep(3000)
;--конец кода 1

ТУТ  ЗАМОРОЗИТЬ СЧЁТЧИК $time1  ; ТУТ ПРОБЛЕМА 1

;---начало кода 2
	sleep(5000)
;--конец кода 3

ТУТ РАЗМОРОЗИТЬ СЧёТЧИК $time1 ; ТУТ ПРОБЛЕМА 2 

;---начало кода 4
	sleep(4000))
;--конец кода 4

MsgBox(64,'ВСЕГО СЧЁТЧИК НАСЧИТАЛ:', TimerDiff($time1) , '', '')
;исходя из кода всего счетчик должен  насчитать 7 секунд
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Зачем изобретать велосипед? Так не подойдет?

Код:
$time1 = TimerInit()
;---начало кода 1
    sleep(3000)
;--конец кода 1

;ТУТ  ЗАМОРОЗИТЬ СЧЁТЧИК $time1  ; ТУТ ПРОБЛЕМА 1
$iTimeDiff1 = TimerDiff($time1)

;---начало кода 2
    sleep(5000)
;--конец кода 3

;ТУТ РАЗМОРОЗИТЬ СЧёТЧИК $time1 ; ТУТ ПРОБЛЕМА 2
$time2 = TimerInit()

;---начало кода 4
    sleep(4000)
;--конец кода 4
$iTimeDiff2 = TimerDiff($time2)
MsgBox(64, 'Time','ВСЕГО СЧЁТЧИК НАСЧИТАЛ:' & Round(($iTimeDiff1 + $iTimeDiff2) / 1000) & ' секунд(ы).' )
;исходя из кода всего счетчик должен  насчитать 7 секунд
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
Спасибо!
Наконец-то дошло мне ))
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
Local $aTimer = _TimerInit()

Sleep( 1000 )
_TimerPause( $aTimer )
Sleep( 5000 )
_TimerResume( $aTimer )
Sleep( 1000 )

ConsoleWrite( _TimerDiff( $aTimer ) & @LF)

; ===
Func _TimerInit()
	Local $aRet[2] = [ TimerInit(), 0 ]
	; ---
	Return $aRet
EndFunc

Func _TimerPause( ByRef $aTimer )
	Local $iErr = 0
	; ---
	Select
		Case UBound( $aTimer ) <> 2
			$iErr = 1
		Case Not $aTimer[0] Or $aTimer[1]
			$iErr = 2
	EndSelect
	$aTimer[1] = TimerInit()
	; ---
	Return SetError( $iErr, 0, ( $iErr = 0 ) )
EndFunc

Func _TimerResume( ByRef $aTimer )
	Local $iErr = 0
	; ---
	Select
		Case UBound( $aTimer ) <> 2
			$iErr = 1
		Case Not $aTimer[0] Or Not $aTimer[1]
			$iErr = 2
	EndSelect
	$aTimer[0] += ( TimerInit() - $aTimer[1] )
	$aTimer[1] = 0
	; ---
	Return SetError( $iErr, 0, ( $iErr = 0 ) )
EndFunc

Func _TimerDiff( ByRef $aTimer )
	Local $iErr = 0
	; ---
	Select
		Case UBound( $aTimer ) <> 2
			$iErr = 1
		Case Not $aTimer[0] Or $aTimer[1]
			$iErr = 2
		Case Else
			Return TimerDiff( $aTimer[0] )
	EndSelect
	; ---
	Return SetError( $iErr, 0, False )
EndFunc

Func _TimerAdd( ByRef $aTimerTo, $aTimerFrom, $iType = 1 )
	Local $iErr = 0
	; ---
	Select
		Case UBound( $aTimerTo ) <> 2 Or UBound( $aTimerFrom ) <> 2
			$iErr = 1
		Case Not $aTimerTo[0] Or $aTimerTo[1] Or Not $aTimerFrom[0] Or $aTimerFrom[1]
			$iErr = 2
	EndSelect
	Switch $iType
		Case 1
			$aTimerTo[0] -= $aTimerTo[0] - $aTimerFrom[0]
		Case 2
			$aTimerTo[0] -= ( TimerInit() - $aTimerTo[0] ) + Abs( $aTimerTo[0] - $aTimerFrom[0] )
		Case Else
			$iErr = 3
	EndSwitch
	; ---
	Return SetError( $iErr, 0, ( $iErr = 0 ) )
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
agikon,
Мой вариант.
Код:
Global $aTimer[3] = [1, TimerInit(), 0], $iStartSec = Random(10, 15, 1), $iEndSec = Random(25, 30, 1)

ConsoleWrite('Suspend from: ' & $iStartSec & ' to: ' & $iEndSec & @LF)
HotKeySet('{Esc}', '_Exit')
While 1
;~ 	или любое другое условие или действие это для примера
	Switch Number(@SEC)
		Case $iStartSec To $iEndSec
			If $aTimer[0] Then
				$aTimer[0] = 0
				$aTimer[2] = TimerInit()
			EndIf
		Case Else
			If Not $aTimer[0] Then
				$aTimer[0] = 1
				$aTimer[2] = TimerDiff($aTimer[2])
				$iStartSec = Random(10, 15, 1)
				$iEndSec = Random(25, 30, 1)
				ConsoleWrite('Suspend from: ' & $iStartSec & ' to: ' & $iEndSec & @LF)
			EndIf
	EndSwitch
	If $aTimer[0] Then
		ToolTip('Timer work now' & @LF & _Time_TimerDiff(TimerDiff($aTimer[1])) & @LF & 'Last time suspend: ' & _Time_TimerDiff($aTimer[2]) & _
				@LF & StringFormat('Now time: %02d:%02d:%02d', @HOUR, @MIN, @SEC), 0, 0)
	Else
		ToolTip('Timer suspend now' & @LF & StringFormat('Now time: %02d:%02d:%02d', @HOUR, @MIN, @SEC), 0, 0)
	EndIf
	Sleep(1000)
WEnd

Func _Time_TimerDiff($i_TimerDiff)
	Local $i_Hour, $i_Min, $i_Sec

	If $i_TimerDiff < 0 Then $i_TimerDiff = 0
	$i_TimerDiff = Int($i_TimerDiff / 1000)
	$i_Hour = Int($i_TimerDiff / 3600)
	$i_TimerDiff = Mod($i_TimerDiff, 3600)
	$i_Min = Int($i_TimerDiff / 60)
	$i_Sec = Mod($i_TimerDiff, 60)
	Return StringFormat('%02d:%02d:%02d', $i_Hour, $i_Min, $i_Sec)
EndFunc   ;==>_Time_TimerDiff

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Верх