Author Topic: Зацикливание в одной части и переход к другой части скрипта  (Read 2368 times)

0 Members and 4 Guests are viewing this topic.

belousov

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Добрый день! Опять обращаюсь за помощью к знатокам.

Допустим часть скрипта выполняется минут 7-10, но иногда какое-нибудь изображение не появляется или появится совсем иное... и тогда скрипт зависает в ожидании искомого.

Пример.
Старт скрипта, в отрывке от А до B (различные действия), от B до C (поиск различных картинок, в общем выполняется за 7-10минут, здесь же и зависает, если не находит), от С до D (различные действия), Стоп.

Подскажите, как сделать, что бы часть скрипта B-C выполнялась необходимое ей время, если справится, то переходит к следующей части C-D, Но если превысит время и достигнет, например, 15 минут, с начала действия части В-С, то переходит к следующей части С-D скрипта?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Нужно использовать цикл с таймером

Code: (clickermann) [Select]
$time = $_time_t + 600 // таймер на 10 минут
WHILE($time > $_time_t) // Цикл выполняется не более 10 минут
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
      $time = 0 // обнуление таймера, выход из цикла
      LCLICK($_return1, $_return2)
      WAITMS(100)
   ELSE
      WAITMS(500)
   END_IF
END_CYC

belousov

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
это понятно) но в этот цикл с таймером вряд ли удастся запихнуть с десяток циклов с таймером и без таймера)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Это почему же? Хоть Войну и Мир можно запихнуть.
Code: (clickermann) [Select]
$time = $_time_t + 600
WHILE($time > $_time_t)
    // здесь разные действия
    // если после кокого-то признака нужно прервать цикл и выйти
    // обнуляем таймер
    $time = 0
    // ...
    // и на очередной итерации выпадаем из цикла
END_CYC

Если тебе после одного из действий нужно срочно прервать цикл и остальное не выполнять, то здесь много способов.
От заворачивания каждой серии в IF, до прыгания в конец цикла по GOTO. Или управляемый поток.
« Last Edit: October 10, 2017, 06:26:22 PM by Vint »


kaizen

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
так как тема про циклы... спрошу прямо здесь
почему скрипт работает именно так? проскакивает "print4"
Code: [Select]
   
$b=3
print(0)
$time = $_time_t + 5
 WHILE($time > $_time_t)
   print(1)
   waitms(500)
   WHILE ($a<$b)  //WHILE( ($a<3) & ($time > $_time_t))
      print(2)
      $b=3
      $a=$a+1
      waitms(500)
    else
     print(3)
     $b=1
     $a=$a-1
     waitms(500) 
    END_CYC
   print(4)
   waitms(500) 
  END_CYC
print(5)
   
halt

в логах
0:48:55 0
0:48:55 1
0:48:55 2
0:48:56 4
0:48:56 2
0:48:57 4
0:48:57 2
0:48:58 4
0:48:58 3
0:48:59 3
0:48:59 3
0:49:00 2
0:49:00 4
0:49:01 2
0:49:01 4
0:49:02 2
0:49:02 4
0:49:03 3
0:49:03 3
0:49:04 3
0:49:04 2


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
почему скрипт работает именно так? проскакивает "print4"
Потому что в кликере у циклов нет блоков ELSE. Всё тело цикла либо выполняется, либо нет.
"Иначе" есть только в уcловиях IF.
« Last Edit: October 11, 2017, 08:17:01 AM by Vint »


kaizen

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
вот я дебил... спасибки за разъяснение