Что нового

Как измерять время работы цикла и выполнять команду если время истекло?

Кайгородов В. Ю.

В универе только TurboBASIC изучал и то забыл уже
Сообщения
25
Репутация
0
У браузера от кликанья случаются разые "подвисания" и чтобы их устранить решил прописать в коде чтобы, в случае задержки на картинки одного цвета больше 30 секунд, бот закрывал и открывал браузер
Код:
$timeintA = 3600000      ;1час
$timeintB = 30000       ;30сек
$y = 0xE7CB8E  ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        Sleep ( '350' )
$begin = TimerInit()
While TimerDiff($begin) < $timeintA
        Sleep ( '350' )
Select
Case PixelGetColor(663, 701) = $y
             MouseClick("primary", 663,518, 1, 0)
             Sleep ( '350' )
             While PixelGetColor(663, 701) = $y
             OtshB()
             WEnd
Case PixelGetColor(663, 701) = 0x0065CB
Click_Pergr()
Case PixelGetColor(663, 701) = 0x000000
Click_Pergr()
Case Else
OtshB()
EndSelect
WEnd
MsgBox(64, "Инфо", "Время работы цикла " & TimerDiff($begin) & " истекло")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Func OtshB()
$beginC = TimerInit()
If TimerDiff($beginC) > $timeintB  Then     ;Таймер прошёл
Click_Pergr()
Else
        Sleep ( '550' )                       ;ждать
EndIf
EndFunc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Func Click_Pergr()
WinClose(WinWait("Google Chrome", "", 5))
        Sleep ( '1350' )
RUN ("C:\Users\Sergey\AppData\Local\Google\Chrome\Application\chrome.exe")
        Sleep ( '1350' )
WinWaitActive("Mail.Ru: почта, поиск в интернете, новости, игры, развлечения - Google Chrome", "", 3)
WinActivate ( "Mail.Ru: почта, поиск в интернете, новости, игры, развлечения - Google Chrome")
EndFunc

Но код не работает таймер сбрасывается не достигая 30 секунд и перезагрузки не происходит.
Помогите переписать код.


Добавлено:
Сообщение автоматически объединено:

Может перенести тему куда-нибудь в другой раздел. Неужели это такой сложный вопрос :stars:
 
Автор
К

Кайгородов В. Ю.

В универе только TurboBASIC изучал и то забыл уже
Сообщения
25
Репутация
0
Пробовал так:
Код:
Func OtshB()
$beginC = TimerInit()
While TimerDiff($beginC) > $timeintB     ;Таймер прошёл
        Sleep ( '550' )                       ;ждать
WEnd
Click_Pergr()
EndFunc

Но она не выходит из цикла TimerDiff($beginC) > $timeintB, пока время не пройдёт, а я хочу добиться чтоб если таймер не прошёл, а цвет уже изменился то функция Click_Pergr() не запускалась.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Кайгородов В. Ю. [?]
Но она не выходит из цикла TimerDiff($beginC) > $timeintB, пока время не пройдёт
А мне кажется, что она вообще в цикл не входит. Результат TimerDiff() в этом коде будет примерно 0,003. Т.е. условие не выполнится. Что-то у вас тут напутано. :scratch:
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Что-то наподобие этого? :scratch:
Код:
$Timer = TimerInit()
While 1
   Sleep(300)
   $Diff = TimerDiff($Timer)
   $Flag =  ProcessExists("notepad.exe") 
   If $Diff > 10000 Or $Flag Then ExitLoop
WEnd
MsgBox(0, "Инфо", "Или время истекло, или Блокнот запущен")
 
Автор
К

Кайгородов В. Ю.

В универе только TurboBASIC изучал и то забыл уже
Сообщения
25
Репутация
0
Весь смысл вопроса: Надо чтоб при смене цвета начиналось выполняться условие другого цвета, а если цвет не менялся более 30 секунд то запускалась функция Click_Pergr() которая бы перезапускала браузер. Таким образом устранялись зависания картинки по разным причинам (крах плагина, зависание браузера, выпадение меню).
Поэтому
Код:
If TimerDiff($beginC) > $timeintB Or PixelGetColor(663, 701) <> $y Then ExitLoop

не подойдёт так как здесь и при условии TimerDiff($beginC) > $timeintB и PixelGetColor(663, 701) <> $y просто прекращается цикл.
А значит цикл под условием Case PixelGetColor(663, 701) = $y завершится и запустится снова и так зависший браузер будет висеть.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Если я правильно понял...
Код:
$timeintA = 3600000      ;1час
$timeintB = 30000       ;30сек
$y = 0xE7CB8E
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Sleep ( 350 )
$begin = TimerInit()
While TimerDiff($begin) < $timeintA
  Sleep ( 350 )
  Switch PixelGetColor(663, 701)
    Case $y
      MouseClick("primary", 663,518, 1, 0)
      Sleep ( 350 )
      OtshB()
    Case 0x0065CB, 0x000000
      Click_Pergr()
    Case Else
      OtshB()
  EndSwitch
WEnd
MsgBox(64, "Инфо", "Время работы цикла " & TimerDiff($begin) & " истекло")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Func OtshB()
  $beginC = TimerInit()
  While TimerDiff($beginC) < $timeintB
    If PixelGetColor(663, 701) <> $y Then Return
    Sleep ( 550 )
  WEnd
  Click_Pergr()
EndFunc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Func Click_Pergr()
  WinClose(WinWait("Google Chrome", "", 5))
          Sleep ( 1350 )
  RUN ("C:\Users\Sergey\AppData\Local\Google\Chrome\Application\chrome.exe")
          Sleep ( 1350 )
  WinWaitActive("Mail.Ru: почта, поиск в интернете, новости, игры, развлечения - Google Chrome", "", 3)
  WinActivate ( "Mail.Ru: почта, поиск в интернете, новости, игры, развлечения - Google Chrome")
EndFunc
 
Верх