Что нового

Проверка переменной

kolosov

Новичок
Сообщения
137
Репутация
0
Добрый вечер,друзья,немного поискал по интернету и не нашёл то в чём нуждаюсь.
Собственно, вот что нужно:
Как только к примеру
Код:
if $A => 1 then

Как только переменная "А" Стала =1, Нужно чтобы программа начала вести подсчёт 15 секунд(Не останавливалась!(Я про Sleep))
И всё это в цикле. Если за эти 15 секунд в цикле,переменная не изменилась то выходила из функции.
Может кто-то с этим помочь?
 
Автор
K

kolosov

Новичок
Сообщения
137
Репутация
0
Старайтесь писать по одному,Столько ответов,не успеваю читать )
Вот кое что набросал,будит ли это адекватно работать или нет?:
Код:
Func PolivD3();Следит когда появиться возможность поливки
	Sleep(4000)
	MouseMove($Center[0]+$Tochka[0],$Center[1]+$Tochka[1])
MouseDown('left')
MouseMove($Center[0]+$Tochka[0],$Tochka[1] + $Center[1]-130)
MouseUp('left')
Sleep(2000)
$ProcesPoliva = 0 
Dim $Timer = 15
Dim $Check = 0
	While 1
	$3result  = _ImageSearch("image\Polit.bmp",1,$PolivX,$PolivY,0)
			
If $3result = 1 Then
	MouseClick("left",$PolivX+15,$PolivY+40,1,40)
	$ProcesPoliva = $ProcesPoliva + 1
	
	Sleep(5000)
EndIf
If $ProcesPoliva = 3 Then
Return
ExitLoop
EndIf
If $ProcesPoliva =>1 Then ; Вот тут надеюсь что будет работать так как хотел в описании. 
	If NOT IsDeclared("hF1_Timer") Then
Dim $hf1_Timer = TimerInit()
Return 0
EndIF
	If TimerDiff($hF1_Timer) < GUICtrlRead($Timer)*1000 Then Return 0
	$Check = $Check + 1
	If $Check >$ProcesPoliva Then
		Return
		ExitLoop
	EndIf
$hF1_Timer = TimerInit()
	EndIf
	WEnd
	EndFunc

Буду благодарен за любой ответ ) :IL_AutoIt_1:
 
A

Alofa

Гость
Код:
Local $iA = 0, $iA_Prev, $hTimer, $iDiff

While 1
	$iA += 0.1
	Sleep(300)
	
;~  If $iA >= 1 Then $iA = 1 ; Для тестирования (принудительно НЕ изменяем $iA)
	
	If $iA >= 1 Then
		If Not $hTimer Then
			$hTimer = TimerInit()
			$iA_Prev = $iA
		EndIf
		$iDiff = TimerDiff($hTimer)
		ConsoleWrite('+>$iA = ' & $iA & ' $iDiff = ' & $iDiff & @LF) ; Для тестирования
		If $iDiff >= 15000 And $iA_Prev = $iA Then Exit MsgBox(262144, $iDiff, 'Выход.')
	EndIf
WEnd
 
Автор
K

kolosov

Новичок
Сообщения
137
Репутация
0
Что-то я совсем не могу понять, что делает ваш код :stars:
Возможно вы меня не поняли, у меня в коде есть переменная которая время от времени меняется,и нужно чтобы код отслеживал последнее её изменение и от момента когда оно случилось,если в течении 15 секунд она не измениться снова то скрипт выйдет из функции.
А у вас в функции, просто одна переменная всё время прибавляется и когда та,будет равна 15.* то пойдёт просто таймер в перёд.
Или если не изменять переменную то,сразу запускается таймер и тормозиться на 15 секундах.
Как я могу это использовать?
 
A

Alofa

Гость
kolosov сказал(а):
... и когда та,будет равна 15.* то пойдёт просто таймер в перёд.
Или если не изменять переменную то,сразу запускается таймер и тормозиться на 15 секундах.
О чьем коде вообще речь? :smile:
 
A

Alofa

Гость
Может так понятней:
Код:
; ...
Func PolivD3();Следит когда появиться возможность поливки
	Sleep(4000)
	MouseMove($Center[0] + $Tochka[0], $Center[1] + $Tochka[1])
	MouseDown('left')
	MouseMove($Center[0] + $Tochka[0], $Tochka[1] + $Center[1] - 130)
	MouseUp('left')
	Sleep(2000)
	$ProcesPoliva = 0
	Dim $Timer = 15
	Dim $Check = 0
	
	While 1
		$3result = _ImageSearch("image\Polit.bmp", 1, $PolivX, $PolivY, 0)
		If $3result = 1 Then
			MouseClick("left", $PolivX + 15, $PolivY + 40, 1, 40)
			$ProcesPoliva = $ProcesPoliva + 1
			Sleep(5000)
		EndIf
		If $ProcesPoliva = 3 Then
			Return
			ExitLoop
		EndIf
		
		If $ProcesPoliva >= 1 Then ; Ссылка обязательна к прочтению: http://autoit-script.ru/autoit3_docs/intro/lang_operators.htm
			If Not $hf1_Timer Then ; Если таймер не задан - Устанавливаем метку времени
				$hf1_Timer = TimerInit()
				$ProcesPoliva_Prev = $ProcesPoliva
			EndIf
			; Если разница во времени от предыдущего вызова TimerInit() больше или равно 15 секундам и $ProcesPoliva равняется своему предыдущему
			; значению (переменной $ProcesPoliva_Prev в которую мы запомнили это самое значение при создании таймера), то тогда выходим из функции.
			If TimerDiff($hf1_Timer) >= 15000 And $ProcesPoliva_Prev = $ProcesPoliva Then Return 1
		EndIf
		
	WEnd
EndFunc   ;==>PolivD3
 
Автор
K

kolosov

Новичок
Сообщения
137
Репутация
0
Да,так намного понятней. Спасибо большое. В скором времени попробую )
 
Верх