Author Topic: Выполнение отложеных\периодических операций  (Read 6697 times)

0 Members and 1 Guest are viewing this topic.

BoJIwE6HuK

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Была цель - сделать в коротком скрипте который длится меньше минуты таймер на самовыключение (остановку) через 85 минут. Начал искать, нашел фунцию в шаблонах "условие с таймером", но не могу понять почему она не работает.
Для теста сделал следующее:
1 - записал минуту хаотичного движения мышью по рабочему столу
2 - в самое начало скрипта вписал то самое "IF" с интервалом выполнения 10 секунд
3 - всё это дело стартанул.

В итоге видим, что условие выполнилось всего 1 раз, при этом сразу после начала скрипта и за целую минуту больше не выполнялось, ПОЧЕМУ?

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
а ты в этом уверен? у тебя перед каждой проверкой условия лог очищается

при этом мне еще почему то кажется что ты ожидал что условие будет проверяться постоянно, пока крутится твой записанный скрипт. однако это не так, оно проверится лишь спустя минуту хаотичных движений, а не в течение.
« Last Edit: November 09, 2013, 07:38:32 AM by Johnny »

BoJIwE6HuK

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
при этом мне еще почему то кажется что ты ожидал что условие будет проверяться постоянно, пока крутится твой записанный скрипт.
тут ты прав

остался один вопрос - как сделать остановку скрипта (halt) через 85 минут после его запуска?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Проще некуда

Code: (clickermann) [Select]
DEFINE($time, $_time_t + 5100)
IF($time < $_time_t)
   HALT
END_IF

BoJIwE6HuK

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Проще некуда

Code: (clickermann) [Select]
DEFINE($time, $_time_t + 5100)
IF($time < $_time_t)
   HALT
END_IF

Спасибо, но это несколько не удобная реализация. А что если мой скрипт длится ровно 20 минут (абстрактное значение, взятое для примера. опираться на него не стоит), т.е. проверка на "$time < $_time_t" будет производиться в 80 минут и в следующий раз уже в 100 минут. Скрипт остановится уже не в 85 минут как надо, а в 100 минут что крайне не желательно (черевато баном, например).

Можно ли остановить скрипт ровно через 85 минут после его запуска?


Неужели нельзя

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Ну если была бы многопоточность, то второй скрипт мог бы остановить первый. но у нас её пока нет.
Этот код вставляется в начале скрипта. Как вариант можно повтыкать условие

IF($time < $_time_t)
  HALT
END_IF

В код в разных местах

BoJIwE6HuK

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Ну если была бы многопоточность, то второй скрипт мог бы остановить первый. но у нас её пока нет.

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

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Если твой скрипт несложный (обычная запись) то скачай Clickermann v2.1 Там есть типо планировщика, время вкл и выкл.

BoJIwE6HuK

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Сейчас да, простой скрипт основаный на "иф пикчер ин" собраный на скорую руку, далее в планах реализация дополнительных возможностей логирования и вывод статистики в конце сессии.

Крис Тинка

  • Активный участник
  • ***
  • Posts: 171
    • View Profile
Oraven, надежда на тебя))) Как сделать задержку в конце скрипта, равную 3600 минус время выполнения скрипта. Скрипт выполняется по кругу и время выполнения различно.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Запись в лог можешь удалить, погрешность +-1 мс

Code: (clickermann) [Select]
$st = $_ms // это в начало

waitms(RND(250,600)) // твой скрипт

print("Время скрипта ", $_ms - $st)

$w = $_ms-$st // это в конец
WAITMS(3600-$w)

print("Общая задержка ", $_ms - $st)

Крис Тинка

  • Активный участник
  • ***
  • Posts: 171
    • View Profile
Суть понятна. Мне нужно было чтобы скрипт выполнялся 1 час. Сделала шаблон в минутах, может кому пригодится.
Code: (clickermann) [Select]
$st = $_time_t // запись точки отсчета
$dt = 8 // Здесь задается минимальное время цикла в минутах
print("задано время;мин", $dt)
//--------------------------------
wait(60*RND(1,5)) // скрипт
//--------------------------------
print("Скрипт выполнялся;мин ", ($_time_t - $st)/60)
$w = $_time_t-$st // Вычисление затраченного времени
if($W<$dt*60)
   print("Добавлено;мин", $dt-$w/60)
   WAIT($dt*60-$w) // добавление времени
else
   print("Время не добавлено из-за превышения.")
end_if
print("Общая задержка; мин ", ($_time_t - $st)/60)