Author Topic: вопрос по таймеру...  (Read 3420 times)

0 Members and 1 Guest are viewing this topic.

belousov

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
вопрос по таймеру...
« on: July 19, 2017, 06:10:30 AM »
Здравствуйте!
При использовании таймера поиск и клик по найденному не прекращаются до истечения времени.
Можно ли как-то принудительно остановить таймер, после нахождения, например, картинки?

Поиск картинки-1 в течение 60сек., но она может появиться и через 5сек, и через 10сек. и т.д.
Вот только таймер ищет и кликает до окончания времени, такой цикл долгий, а нужно прекратить после нахождения и клика.

пример1:
 Если картинка-1 найдена, то клик по ней, прекращение поиска и работы таймера, и переход к действию-1.
   Если НЕ найдена картинка-1, то поиск картинки-2.
 Если найдена картинка-2, то клик, прекращение поиска и работы таймера, и переход к действию-2.
  Если НЕ найдена картинка-2, то снова ищем картинку-1.
И так по кругу в течение 60сек., но по нахождению картинки-1 или 2 прекращать отсчет таймера.

пример2:
 Если картинка-1 найдена, то клик по ней, прекращение поиска и работы таймера, и переход к действию-1.
   Если НЕ найдена картинка-1, то переход к действию-2.
И так по кругу в течение 60сек., но по нахождению картинки-1 прекращать отсчет таймера.
« Last Edit: July 19, 2017, 06:30:17 AM by belousov »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: вопрос по таймеру...
« Reply #1 on: July 19, 2017, 08:27:00 AM »
Как это работает:
$time - это обычная переменная, может иметь любое имя. Если внутри цикла по времени есть еще один цикл то эти переменные должны иметь разные имена.
$_time_t - это системная переменная возвращающая текущее время Unix в секундах
$time = $_time_t + 60 - здесь мы прибавляем к времени Unix значение 60 и записываем это в переменную $time
WHILE($time > $_time_t)  - цикл проверяет условие, и если значение в $time больше времени Unix то цикл выполняется. Чтобы при следующей проверке условия прервать цикл, достаточно обнулить значение в переменной $time
$time = 0

Code: (clickermann) [Select]
$time = $_time_t + 60 // таймер на 60 секунд
WHILE($time > $_time_t)
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "1.bmp", -1, 100)
      $time = 0 // обнуляем значение, разрешаем выход из цикла.
      LCLICK($_return1, $_return2)
      WAITMS(100)
   ELSE
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "2.bmp", -1, 100)
         $time = 0
         LCLICK($_return1, $_return2)
         WAITMS(100)
      ELSE
         WAITMS(50)
      END_IF
   END_IF
END_CYC
IF($time ! 0) // это необязательное условие
   // Здесь действия если за 60 секунд картинки не были найдены
   
END_IF

belousov

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Re: вопрос по таймеру...
« Reply #2 on: July 19, 2017, 08:56:03 AM »
Oraven, спасибо за подробное разъяснение. Буду пробовать.  :)

belousov

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Re: вопрос по таймеру...
« Reply #3 on: July 21, 2017, 05:12:22 AM »
Еще раз обращаюсь к вам за помощью.
Запутался с поиском картинок, с переходом одних картинок к другим, в одном цикле с таймером 60сек. на каждый поиск, с его принудительным отключением при обнаружении.

Пример:

Поиск картинки-1, клик.
Если найдена картинка-1, то поиск картинки-2, клик.
   Если НЕ найдена картинка-1, то поиск картинки-3, клик.
          Если найдена картинка-3, то поиск картинки-4, клик.
                 Если найдена картинка-4, то поиск картинки-3, клик.
                        Если НЕ найдена картинка-4, то перезагрузка ПК.
          Если НЕ найдена картинка-3, то перезагрузка ПК.

С картинки-2 начинается уже другой цикл...
   
« Last Edit: July 21, 2017, 05:45:30 AM by belousov »

Evgenij_M

  • Освоившийся
  • **
  • Posts: 58
    • View Profile
Re: вопрос по таймеру...
« Reply #4 on: July 21, 2017, 08:28:59 AM »
...
Запутался с поиском картинок, с переходом одних картинок к другим, в одном цикле с таймером 60сек. на каждый поиск, с его принудительным отключением при обнаружении.
...
 

А вот тут я могу посоветовать очень хорошую бесплатную браузерную программу для рисования диаграмм (блок-схем и прочего):

draw.io (https://www.draw.io/)

Прекрасные возможности для оформления. При желании, можно установить и десктопную версию.
Имеющиеся в распоряжении фигуры-контейнеры, которые можно сворачивать/разворачивать, позволяют хранить внутри них ФРАГМЕНТЫ КОДА того действия, которое Вы обозначите на фигуре.

Я бы даже предложил рассмотреть В ОТДЕЛЬНОЙ ТЕМЕ работу над логикой программ с помощью такого-вот редактора диаграмм... Понятная визуализация логики, возможность обмена файлами и ОДНОВРЕМЕННОЙ СОВМЕСТНОЙ РАБОТЫ над блок-схемой снимает мно-о-ого головной боли  ;)

belousov

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Re: вопрос по таймеру...
« Reply #5 on: July 21, 2017, 09:04:34 AM »
...
Запутался с поиском картинок, с переходом одних картинок к другим, в одном цикле с таймером 60сек. на каждый поиск, с его принудительным отключением при обнаружении.
...
 

А вот тут я могу посоветовать очень хорошую бесплатную браузерную программу для рисования диаграмм (блок-схем и прочего):

Evgenij_M, спасибо, конечно, за подсказку, но не блок-схемы мне сейчас нужны, а в каком порядке где ставить IF...ELSE... и тд. и тп. в моём примере. Может не так излагаю мысли, извините)
Если, честно, то я и не знаю как правильно составлять блок-схемы. Могу, конечно, для себя как-нибудь набросать на листочке, но вряд ли вы поймёте) 
При таком раскладе порой таймер не считает, то поиск перепрыгивает какую-нибудь картинку...волшебная палочка вроде бы и выровняла всё, а всё равно где-нибудь косяк у меня.
« Last Edit: July 21, 2017, 09:49:04 AM by belousov »

belousov

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Re: вопрос по таймеру...
« Reply #6 on: July 21, 2017, 09:30:57 AM »
Взгляните, пожалуйста, правильно ли всё расставил? Что-то я с таймером не так сделал...

Эти строки перед поиском каждой картинки вставлять?
Code: (clickermann) [Select]
$time = $_time_t + 60
WHILE($time > $_time_t)
Например:
для картинки-3:
Code: (clickermann) [Select]
$time2 = $_time_t + 60
WHILE($time2 > $_time_t)
...
$time2 = 0
для картинки-4
Code: (clickermann) [Select]
$time3 = $_time_t + 60
WHILE($time3 > $_time_t)
...
$time3 = 0
И так далее?

Тогда вот эту строку для таймера, в самый низ или под поиском каждой картинки?
Code: (clickermann) [Select]
END_CYC
Code: (clickermann) [Select]
$time = $_time_t + 60
WHILE($time > $_time_t)
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "1.bmp", -1, 100)
      $time = 0
      LCLICK($_return1, $_return2)
      HINTPOPUP("НАЙДЕНО 1")
      WAITMS(1000)
   ELSE
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "3.bmp", -1, 100)
         $time = 0
         LCLICK($_return1, $_return2)
         HINTPOPUP("НАЙДЕНО 3")
         WAITMS(1000)
      ELSE
         HINTPOPUP("НЕ НАЙДЕНО 3")
         WAITMS(50)
         EXECUTE ("shutdown.exe", "/r /t 00")
      END_IF
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "4.bmp", -1, 100)
         $time = 0
         LCLICK($_return1, $_return2)
         HINTPOPUP("НАЙДЕНО 4")
         WAITMS(1000)
      ELSE
         HINTPOPUP("НЕ НАЙДЕНО 4")
         WAITMS(50)
         EXECUTE ("shutdown.exe", "/r /t 00")
      END_IF
   END_IF
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "2.bmp", -1, 100)
      $time = 0
      LCLICK($_return1, $_return2)
      HINTPOPUP("НАЙДЕНО 2")
      WAITMS(1000)
   ELSE
      HINTPOPUP("НЕ НАЙДЕНО 2")
      WAITMS(1000)
   END_IF
END_CYC

HALT
« Last Edit: July 21, 2017, 10:34:34 AM by belousov »

Evgenij_M

  • Освоившийся
  • **
  • Posts: 58
    • View Profile
Re: вопрос по таймеру...
« Reply #7 on: July 21, 2017, 12:55:16 PM »

Evgenij_M, спасибо, конечно, за подсказку, но не блок-схемы мне сейчас нужны, а в каком порядке где ставить IF...ELSE... и тд. и тп. в моём примере...

Ох, как Вы заблуждаетесь, уважаемый...

Если бы у Вас была диаграмма, какую я себе сейчас представляю для Вашей задачи, то у Вас и вопросов бы, наверняка, не было.
Расстановка IF...ELSE... и прочего, это КОДИРОВАНИЕ, а не программирование. А у Вас, похоже, именно ПРОГРАММЫ то и нет.

Нет ничего лучше создания ПРОГРАММЫ с помощью визуальных методов и инструментов 8)

belousov

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Re: вопрос по таймеру...
« Reply #8 on: July 21, 2017, 01:43:13 PM »

Evgenij_M, спасибо, конечно, за подсказку, но не блок-схемы мне сейчас нужны, а в каком порядке где ставить IF...ELSE... и тд. и тп. в моём примере...

Ох, как Вы заблуждаетесь, уважаемый...

Если бы у Вас была диаграмма, какую я себе сейчас представляю для Вашей задачи, то у Вас и вопросов бы, наверняка, не было.
Расстановка IF...ELSE... и прочего, это КОДИРОВАНИЕ, а не программирование. А у Вас, похоже, именно ПРОГРАММЫ то и нет.

Нет ничего лучше создания ПРОГРАММЫ с помощью визуальных методов и инструментов 8)
Послушайте, я прошу проверить правильность написанного и подсказать, что не так.
Не нужно мне читать лекции.
Я искренне рад , что вы во всём этом прекрасно разбираетесь. Для меня же это пока что тёмный лес.
Если вы набросали диаграмму, так выкладывайте.
Если есть что-то по делу - пишите.
Можете помочь - помогите.
Пожалуйста, не засоряйте тему.
« Last Edit: July 21, 2017, 01:49:33 PM by belousov »

Evgenij_M

  • Освоившийся
  • **
  • Posts: 58
    • View Profile
Re: вопрос по таймеру...
« Reply #9 on: July 21, 2017, 03:56:11 PM »

Послушайте, я прошу проверить правильность написанного и подсказать, что не так.
Не нужно мне читать лекции.
Я искренне рад , что вы во всём этом прекрасно разбираетесь. Для меня же это пока что тёмный лес.
Если вы набросали диаграмму, так выкладывайте.
Если есть что-то по делу - пишите.
Можете помочь - помогите.
Пожалуйста, не засоряйте тему.

Да я, вообще-то, как-раз помочь и пытался  :-[

Я Вам инструментпредлагал, который навсегда избавил бы Вас от возникновения вот таких-вот проблем. А Вы...

Вам сейчас люди напишут, что куда в этом коде поставить. Но, на следующих задачах Вы ОПЯТЬ же упрётесь в точно такие же тупики.

А жаль...  :-[ (исчезаю...)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: вопрос по таймеру...
« Reply #10 on: July 22, 2017, 08:39:03 AM »
Судя по всему здесь у тебя начинается бесконечный цикл
Quote
          Если найдена картинка-3, то поиск картинки-4, клик.
                 Если найдена картинка-4, то поиск картинки-3, клик.

Тогда пишем так
Code: (clickermann) [Select]
$time = $_time_t + 60
WHILE($time > $_time_t)
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "1.bmp", -1, 100)
      $time = 0
      LCLICK($_return1, $_return2)
      HINTPOPUP("НАЙДЕНО 1")
      WAITMS(1000)
      GETSCREEN
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "2.bmp", -1, 100)
         LCLICK($_return1, $_return2)
         HINTPOPUP("НАЙДЕНО 2")
         WAITMS(1000)
      ELSE
         HINTPOPUP("НЕ НАЙДЕНО 2")
         WAITMS(1000)
      END_IF
   ELSE
     
      WHILE(1)
         GETSCREEN
         IF_PICTURE_IN (0,0, $_xmax,$_ymax, "3.bmp", -1, 100)
            LCLICK($_return1, $_return2)
            HINTPOPUP("НАЙДЕНО 3")
            WAITMS(1000)
         ELSE
            HINTPOPUP("НЕ НАЙДЕНО 3")
            WAITMS(50)
            EXECUTE ("shutdown.exe", "/r /t 00")
            HALT             
         END_IF
         
         GETSCREEN
         IF_PICTURE_IN (0,0, $_xmax,$_ymax, "4.bmp", -1, 100)
            LCLICK($_return1, $_return2)
            HINTPOPUP("НАЙДЕНО 4")
            WAITMS(1000)
         ELSE
            HINTPOPUP("НЕ НАЙДЕНО 4")
            WAITMS(50)
            EXECUTE ("shutdown.exe", "/r /t 00")
            HALT
         END_IF
      END_CYC
     
   END_IF
END_CYC

HALT