Что нового

[Автоматизация] Пауза и возобновление работы скрипта

systel

Новичок
Сообщения
26
Репутация
1
Я знаю что уже есть подобные темы, но я столкнулся с проблемой, сейчас попробую объяснить.
Вот пример кода:

Код:
Func _paused()
   while 1
         ; Тут немного всяких действий
   WEnd
EndFunc

AdlibRegister('_paused', 720000) ;На самом деле время больше, но сути не меняет

while 1
   ; тут много вызывающихся функций, а так же циклов и условий
WEnd


Вкратце в основе он ходит по сайту и клиает туда сюда, сравнивает данные и т.д. и т.п.
Когда вызывается функция паузы, он переходит на определенную страницу и там сравнивает кое какие данные, если надо, то тыкает, если нет, то нет. и потом должен вернуться и работать дальше.

Проблема в том, что если функция паузы вызывается не в самый лучший момент работы скрипта, то когда она возвращается и условие какое-то может не сработать, или цикл завершится т.к. условие не сработало или че-нить в этом роде и он может или просто продолжить работать дальше если повезет, или застопоривается :(

Можно ли как-нибудь сделать безопасную паузу для основной работы скрипта?
Или я чет не так делаю? :scratch:
 

_ToBe_

Осваивающий
Сообщения
142
Репутация
35
Тоже сталкивался с такой бедой... Когда есть цикл While -> Wend и где-то в середине цикла врывается AddLibRegister, происходит косяк с переменными ну и скрипт либо прерывается либо некорректно себя ведёт :smile:

В зависимости от ситуации, я решаю это двумя способами
1. Таймер
Код:
While 1 
 $timer = _Timer_Init()
    ;тут чё-то делается
 If _TimerDiff($timer) >= 720 000 Then
  _Pause()
 Endif
Wend


2. Отключением и включением AdlibRegister()

О, тема уже решена была, пока я писал ;D
 
Автор
S

systel

Новичок
Сообщения
26
Репутация
1
_ToBe_

Хмм... а вариант с таймером интересен, попробую :smile:
Спасибо
 

_ToBe_

Осваивающий
Сообщения
142
Репутация
35
И не забудь включить библиотеку

Код:
#include <Timers.au3>


Всегда пожалуйста :smile:
П.С. Наконец-то и я стал полезен этому форуму :D
 
Автор
S

systel

Новичок
Сообщения
26
Репутация
1
Кстати пока не забыл, но тем у кого просто скопирует пример _ToBe_, не будет работать.
Т.к. там есть ошибки, да и сам пример просто зациклится, в общем вот рабочее.

Код:
#include <Timers.au3>

$timer = _Timer_Init() ;Вынимаем его из цикла, иначе зациклимся

While 1 

    ;тут чё-то делается

 If _Timer_Diff($timer) >= 720000 Then
   ;а тут то что мы хотим вызывать в определенный период времени
   $timer = _Timer_Init() ;обнуляем счетчик
 Endif
Wend
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
_ToBe_ , systel,
А чем Вас не устраивают штатные функции?
Код:
TimerInit()
TimerDiff()
 

_ToBe_

Осваивающий
Сообщения
142
Репутация
35
systel, Cпасибо что поправил :D

madmasles , по мне так у библиотеки <Timers.au3> шире функционал и иногда приходилось к нему прибегать, поэтому им и пользуюсь :whistle:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
_ToBe_
как функционал у библиотеки может быть не шире чем у одной функции?
а вообще, без разницы что использовать. и то и то используют одну и ту же WinAPI функцию, если брать конкретно TimerInit и TimerDiff
 

_ToBe_

Осваивающий
Сообщения
142
Репутация
35
Я в этом не силён, кто откуда чем пользуется, просто в справке по этому вопросу без библиотеки я нашёл только
Код:
TimerInit
TimerDiff

а с библиотекой, появились такие возможности, как:
Код:
_Timer_GetIdleTime 
_Timer_GetTimerID 
_Timer_KillAllTimers 
_Timer_KillTimer 
_Timer_SetTimer 
_TimeToTicks

есть где развернуться и что почитать :D
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
_ToBe_
так то оно и так, комментарий madmasles относился именно к тому коду который ты привел, где используются только Init и Diff. просто многие, и я в том числе, придерживаются минималистического подхода. если можно обойтись без привлечения дополнительных средств, то нужно этим пользоваться. эдакая примитивная реализация бритвы оккама
 

_ToBe_

Осваивающий
Сообщения
142
Репутация
35
Kaster Аааа, вот оно что... :-[
Ну просто я пару раз сталкивался с тем, что стандартные средства работают не так быстро как средства через подключаемые библиотеки... Например стандартный PixelSearch и поиск пикселя через библиотеку WinApiEx.au3 :-[
 
Верх