Author Topic: Вопрос по циклам  (Read 6623 times)

0 Members and 2 Guests are viewing this topic.

showtime

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Вопрос по циклам
« on: October 22, 2014, 03:29:10 PM »
Здравствуйте.Ламмер я еще тот. Не могу разобраться в следующем:
есть 2 подпрограммы-  нужно, что бы программа 1 выполнялась до принудительной остановки.
при этом - программа 2 должна включаться каждые 30 мин и выполняться, после ее выполнения - продолжение работы программы 1.

к примеру, программа 1:
Code: [Select]
сLCLICK(1294,378)  // 16777215 
WAITMS(500)
LCLICK(342,345)  // 8355711
WAITMS(500)
LCLICK(342,345)  // 8355711
WAITMS(500)
LCLICK(342,345)  // 8355711
WAITMS(1000)
LCLICK(420,872)  // 8146958 
WAITMS(500)
программа 2 - такая же (для простоты примера)
подскажите, люди добрые!

зы. при первом запуске - программа 2 должна сработать сразу после программы 1. далее - каждые пол часа
« Last Edit: October 22, 2014, 03:31:10 PM by showtime »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Вопрос по циклам
« Reply #1 on: October 22, 2014, 03:40:03 PM »
Одно и тоже...

Code: (clickermann) [Select]
// работает бесконечно
LCLICK(1294,378)  // 16777215
WAITMS(500)
LCLICK(342,345)  // 8355711
WAITMS(500)
LCLICK(342,345)  // 8355711
WAITMS(500)
LCLICK(342,345)  // 8355711
WAITMS(1000)
LCLICK(420,872)  // 8146958
WAITMS(500)

// сработает через 30 мин и каждые 30 мин
DEFINE($time1, $_time_t + 1800)
IF($time1 < $_time_t)
   LCLICK(1294,378)  // 16777215
   WAITMS(500)
   LCLICK(342,345)  // 8355711
   WAITMS(500)
   LCLICK(342,345)  // 8355711
   WAITMS(500)
   LCLICK(342,345)  // 8355711
   WAITMS(1000)
   LCLICK(420,872)  // 8146958
   WAITMS(500)
   $time1 = $_time_t + 1800
END_IF

showtime

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Вопрос по циклам
« Reply #2 on: October 22, 2014, 03:52:17 PM »
Большое спасибо. А программа 2 первый раз сработает только через пол часа?
Возможно ли срабатывание при запуске и далее каждые пол часа?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Вопрос по циклам
« Reply #3 on: October 22, 2014, 04:03:26 PM »
Большое спасибо. А программа 2 первый раз сработает только через пол часа?
Возможно ли срабатывание при запуске и далее каждые пол часа?
убераешь строку 14
Code: (clickermann) [Select]
DEFINE($time1, $_time_t + 1800)
« Last Edit: October 22, 2014, 04:44:49 PM by Vint »


showtime

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Вопрос по циклам
« Reply #4 on: October 29, 2014, 11:27:10 AM »
Cильно не бейте. Пытаюсь разобраться.. вопрос такой:
Одно и тоже...

Code: (clickermann) [Select]
// сработает через 30 мин и каждые 30 мин
DEFINE($time1, $_time_t + 1800)
IF($time1 < $_time_t)
  //какая-то программа
   $time1 = $_time_t + 1800
END_IF
в строке 2 задаем переменную, которая будет равна  $_time_t + 1800 ?
условие в строке 3 не выполняется, конец. здесь точно должен быть знак меньше?

поясните, что происходит на самом деле?..

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Вопрос по циклам
« Reply #5 on: October 29, 2014, 12:11:00 PM »
в строке 2 задаем переменную, которая будет равна  $_time_t + 1800 ?
Да.
условие в строке 3 не выполняется, конец. здесь точно должен быть знак меньше?
Не выполняется. Не конец, а повтор скрипта с начала. Условие не сработает пока не пройдёт 30 минут.
В этом скрипте:
Запуск. Работа основной части. //какая-то программа запустится ТОЛЬКО через 30 минут. Отработает и опять через 30 мин.

Если строку 2 убрать (не задавать начальное $time1). То первый раз сработает сразу же. И дальше через 30 мин.


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Вопрос по циклам
« Reply #6 on: October 29, 2014, 12:14:57 PM »
Quote
поясните, что происходит на самом деле?..

Code: (clickermann) [Select]
// сработает через 30 мин и каждые 30 мин

DEFINE($time1, $_time_t + 1800)//задаем значение $time1, оно станет равным $_time_t + 1800. $_time_t это количество секунд, прошедших с полуночи  1 января 1970 года, но это неважно.
//допустим $_time_t=1000 в данный момент, значит $time1=$_time_t + 1800=2800

IF($time1 < $_time_t) //проверяем - $time1 меньшн $_time_t или нет, а оно то больше(значит условие невыполняется).....идут секуды.....идут.....$_time_t увеличивается, через 1800 сек $_time_t=2800, еще сек и 2801, и тут $time1 становится меньше чем $_time_t, значит условие выполнится
  //какая-то программа
   $time1 = $_time_t + 1800 //в конце программы опять присваеваем значение $time1, опятьже оно равно $_time_t + 1800, и опять условие небудет выполняться 1800 сек
END_IF

хочу добавить, что DEFINE($time1, $_time_t + 1800) сработает только 1 раз в начале выполнения сценария, далее она будет игнорироваться, далее $time1 будет присваеваться значение с помощью $time1 = $_time_t + 1800
« Last Edit: October 29, 2014, 12:24:48 PM by dramster »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Вопрос по циклам
« Reply #7 on: October 29, 2014, 12:16:44 PM »
$_time_t - это системная переменная возвращающая текущее время Unix в секундах
мы берем время Unix, прибавляем к нему 1800 секунд и записываем значение в переменную $time1
В условии переменная $time1 будет сравниваться с $_time_t и по началу $time1 будет больше но со временем $_time_t нагонит записанное значение и условие наконец сработает.

quant13

  • Активный участник
  • ***
  • Posts: 174
    • View Profile
Re: Вопрос по циклам
« Reply #8 on: October 29, 2014, 12:37:38 PM »
Quote
Code: (clickermann) [Select]
// сработает через 30 мин и каждые 30 мин
DEFINE($time1, $_time_t + 1800)
IF($time1 < $_time_t)
  //какая-то программа
   $time1 = $_time_t + 1800
END_IF

DEFINE($time1, $_time_t + 1800) // объясните как это работает в теле скрипта?
это похоже на морковку у ослика перед носом. Пока выполняется скрипт $_time_t никогда не догонит $time1. оно каждый раз увеличиваться должно, но почему-то скрипт работает.
или DEFINE($time1, $_time_t + 1800) срабатывает только при ПЕРВОМ цикле выполнения, а $time1 = $_time_t + 1800 при КАЖДОМ ??

showtime

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Вопрос по циклам
« Reply #9 on: October 29, 2014, 12:39:16 PM »
Vint, dramster, Oraven, спасибо за разъяснения.
не понимал, т.к думал что при невыполнении условия, возвращаясь в
Code: (Clickermann) [Select]
DEFINE($time1, $_time_t + 1800)
$time1 задается заново (ведь $_time_t у нас постоянно увеличивается)

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Вопрос по циклам
« Reply #10 on: October 29, 2014, 12:40:57 PM »
Quote
Code: (clickermann) [Select]
// сработает через 30 мин и каждые 30 мин
DEFINE($time1, $_time_t + 1800)
IF($time1 < $_time_t)
  //какая-то программа
   $time1 = $_time_t + 1800
END_IF



DEFINE($time1, $_time_t + 1800) // объясните как это работает в теле скрипта?
это похоже на морковку у ослика перед носом. Пока выполняется скрипт $_time_t никогда не догонит $time1. оно каждый раз увеличиваться должно, но почему-то скрипт работает.
или DEFINE($time1, $_time_t + 1800) срабатывает только при ПЕРВОМ цикле выполнения, а $time1 = $_time_t + 1800 при КАЖДОМ ??

Инструкция сработает только если переменная не была объявлена раньше. В противном случае инструкция игнорируется.(это из справки км)

showtime

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Вопрос по циклам
« Reply #11 on: October 29, 2014, 12:58:44 PM »
Если строку 2 убрать (не задавать начальное $time1). То первый раз сработает сразу же. И дальше через 30 мин.
IF сработает если переменная $time1 не была объявлена?

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Вопрос по циклам
« Reply #12 on: October 29, 2014, 01:00:15 PM »
Если строку 2 убрать (не задавать начальное $time1). То первый раз сработает сразу же. И дальше через 30 мин.
IF сработает если переменная $time1 не была объявлена?
да, $time1 в этом случае будет приравнена к "0"

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Вопрос по циклам
« Reply #13 on: October 29, 2014, 01:00:20 PM »
Если строку 2 убрать (не задавать начальное $time1). То первый раз сработает сразу же. И дальше через 30 мин.
IF сработает если переменная $time1 не была объявлена?
Переменные объявляются автоматически при первом упоминании. Значение у них будет 0

showtime

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Вопрос по циклам
« Reply #14 on: October 30, 2014, 06:34:46 AM »
Назрел вопрос. в скрипте работает такая подпрограмма:
Code: (Clickermann) [Select]
// СБОР ЛУТА
SUB(search, $e, $t, $k, $u, $c, $h)
   $check = 1
   WHILE($check < 14) // количество текстур для поиска (n-1)
      GETSCREEN
      IF_PICTURE_IN ($e,$t, $k,$u, STRCONCAT($check, ".bmp"), -1, 85)
         WAITMS(10)
         MOVE($_return1, $_return2)
         WAITMS(50)
         LCLICK($_return1, $_return2) // выделение
         WAITMS(10)
         MOVE($c,$h)
         WAITMS(100)
         LCLICK($c,$h) // !!!ЗАБРАТЬ
         WAITMS(50)
         INC($check, -1)
      END_IF
      WAITMS(50)
      INC($check)
   END_CYC
END_SUB
осуществляется поиск текстур, в случае нахождения какой-либо - ищет еще раз такую же и только потом переходит к поиску следующей.
вопрос: возможно ли сделать так, что в случае нахождения одной и той же текстуры и попытке ее взять эдак  раз 20 - он перестанет ее искать 21-ый раз и перейдет к поиску следующей. на деле невозможно найти больше 20ти раз одну и ту же текстуру при обращении к подпрограмме и, если такое случается, имеет место тех.неполатка (игровой момент) и нужно "скипнуть" поиск этой текстуры и перейти к поиску следующей
« Last Edit: October 30, 2014, 06:36:18 AM by showtime »