Author Topic: Нужна помощь с потоками  (Read 2368 times)

0 Members and 3 Guests are viewing this topic.

ewa

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Нужна помощь с потоками
« on: February 02, 2019, 10:09:16 PM »
Добрый день. Не разобрался с потоками.
Написан работающий скрипт, довольно длинный, с кучей циклов, основанных на анализе экрана. Всё работает. Здесь проблем нет.
Однако время от времени вылетает Adobe Flash Player. Об этом сообщает черный экран и характерная картинка по центру. По проверке на эту картинку можно определить падение флеша.
Но вставлять проверку на эту картинку во все свои многочисленные циклы не хотелось бы.
А хотелось бы, чтобы параллельно основному работал второй поток, который время от времени, например, каждую минуту, проверял бы на падение флеша. И если падение действительно случилось, то останавливал бы действия по первому потоку, производил бы определенные действия по перезапуску игры и снова включал бы первый поток.
И вот как это сделать, даже не предполагаю.

Upd. Вопрос по взаимодействию двух потоков. Чтобы второй мог останавливать (совсем останавливать, а не ПРИостанавливать) и запускать (с самого начала) первый поток.
« Last Edit: February 02, 2019, 11:40:46 PM by ewa »

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
Re: Нужна помощь с потоками
« Reply #1 on: February 02, 2019, 10:17:07 PM »
пиши так, что бы скрипт не зацикливался на одном месте где нужна проверка)
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

iggi

  • Освоившийся
  • **
  • Posts: 22
    • View Profile
Re: Нужна помощь с потоками
« Reply #2 on: February 02, 2019, 11:41:14 PM »
Не вижу проблем.
Основной скрипт помести в поток 1, а поток 2 пусть делает проверку на краш Flash Player'а.
Вылет Flash Player'а необязательно проверять именно по картинке, я бы это сделал проверкой считывания заголовка окна о краше, так будет меньше нагрузка.
Тогда скрипт будет примерно такой:

Code: (clickermann) [Select]
THREAD(t1)
//здесь весь основной скрипт
END_THREAD

THREAD(t2) //поток проверки Adobe Flash Player'а на краш
IF(WNDFIND("Adobe Flash")>0) //если найдено окно с заголовком Adobe Flash
SETTHREAD(t1,0) //ставим поток t1 на паузу
//здесь действия по перезапуску игры
SETTHREAD(t1,1) //снимаем поток t1 с паузы
END_IF
WAIT(60) //периодичность проверки на краш Adobe Flash Player'а
END_THREAD

Точное наименование окна Adobe Flash,  лучше уточнить  в менеджере окон кликермана, когда произойдет краш.
« Last Edit: February 02, 2019, 11:58:58 PM by iggi »

ewa

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Re: Нужна помощь с потоками
« Reply #3 on: February 02, 2019, 11:44:54 PM »
Яндекс.Броузер нифига не пишет название окна типа "Adobe Flash...". Так что проверка краха будет по цвету экрана или картинке в центре. Это не проблема. Проблема в том, что мне надо совсем остановить первый поток. А потом его запустить с самого начала. Пауза не поможет, потому что я никогда не угадаю, в каком из многочисленных циклов первого потока случилась эта пауза и как после этого вернуть первый поток в рабочее состояние.

iggi

  • Освоившийся
  • **
  • Posts: 22
    • View Profile
Re: Нужна помощь с потоками
« Reply #4 on: February 02, 2019, 11:56:26 PM »
Ок. Тогда скрипт будет такой:

Code: (clickermann) [Select]
THREAD(t1)
   //здесь весь основной скрипт
END_THREAD

THREAD(t2) //поток проверки Adobe Flash Player'а на краш
   SETTHREAD(t1,0) //ставим поток t1 на паузу, чтобы GETSCREEN второго потока не пересекался с GETSCREEN первого
   GETSCREEN
   IF(PXL(100,100)=0) //если появился черный экран
      SETTHREAD(t1,2) //ставим поток t1 на паузу, при последующем снятии с паузы поток начинает выполняться с начала, независимо от того, на какой инструкции тела он был остановлен
      //здесь действия по перезапуску игры
      SETTHREAD(t1,1) //снимаем поток t1 с паузы
   END_IF
   SETTHREAD(t1,1) //снимаем поток t1 с паузы
WAIT(60) //периодичность проверки на краш Adobe Flash Player'а   
END_THREAD
« Last Edit: February 03, 2019, 12:42:03 AM by iggi »

iggi

  • Освоившийся
  • **
  • Posts: 22
    • View Profile
Re: Нужна помощь с потоками
« Reply #5 on: February 03, 2019, 12:12:34 AM »
Забыл написать, тебе нужен кликерман версии 4.12 или выше, т.к. более старые работают с setthread по другому.
« Last Edit: February 03, 2019, 12:24:52 AM by iggi »

ewa

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Re: Нужна помощь с потоками
« Reply #6 on: February 03, 2019, 01:21:56 AM »
Да-да, опции 2 в SETTHREAD я в хелпе не видел... Проверим...