Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Создание нескольких потоков.
Varlock
сообщение 29.1.2018, 22:42
Сообщение #1


**

Neophyte
Сообщений: 31
Регистрация: 17.1.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 18.789



Собственно с основами я разобрался (IMG:style_emoticons/default/smile.gif) Теперь возник вопрос сложнее: а как бы мне создать несколько потоков действий для одного окна?
Для примера: в программе есть шаблон действий, которые я выполняю постоянно в цикле, с той скоростью с которой успевает реагировать программа. Однако периодически возникает необходимость выполнения других действий. Причём этих действий имеется несколько десятков, но их необходимость достаточно редка(иногда реже раза в час) и я определяю её по появившейся картинке. Поиск десятка картинок на экране занимает секунд 5-10 времени(точно не засекал), так что если я его включаю в основной цикл, то основной шаблон, который до этого я успевал сделать действия 2-3 раза в секунду, начинает происходить раз в те самые 5-10 секунд(т.е. потеря производительности в 20-30 раз), пока он проверит остальные условия. Мне же хотелось бы, чтобы он в одном потоке делал шаблон, а во втором искал условия, и только по их нахождению останавливал шаблон и совершал другие действия.

При создании двух скриптов на одно окно столкнулся с проблемой - т.к. при нахождении дополнительный условий вторым скриптом, первый не останавливает свою работу (а и там и там идут переходы по нескольким менюшкам), то в итоге в лучшем случае получается фигня - когда два скрипта по очереди тыкают по нужным им кнопкам, а ещё очень часто они одновременно пытаются что-то сделать в программе, при этом намертво подвешивая её.

Т.е. мне нужна какая-то синхронизация, либо между двумя потоками в одном скрипте(чтобы один действовал, второй мониторил, и когда второй находил условия для действий, первый уступал ему на время возможность совершить действия, либо же сам действовал по другому алгоритму), либо синхронизация между несколькими скриптами, чтобы они обменивались данными и не мешали друг другу работать в одном окне.

Кто подскажет, как это можно организовать буду очень благодарен (IMG:style_emoticons/default/smile.gif) Особенно если в виде кода(хотя можно и просто список функций (IMG:style_emoticons/default/smile.gif) если что разберусь как-нить или задам вопросы по непонятному), как создавать потоки, если это возможно, и передать переменную(или хотябы просто сигнал-прерывание) из одного потока или скрипта в другой.
З.Ы, если возможно оба варианта - и потоки и передача переменных из скрипта в скрипт, то буду благодарен, если укажете оба варианта т.к. уверен что в будущем они оба мне пригодятся (IMG:style_emoticons/default/smile.gif) (я уже запланировал написать ещё как минимум ещё 4 скрипта)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
фонарик
сообщение 29.1.2018, 23:10
Сообщение #2


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Я не особый спец, скорее просто любитель, что могу посоветовать.
Скрипты могут ставиться на паузу из другого скрипта. В данном случае просто указывается номер скрипта который надо поставить на паузу. Например:
pause_script 7
//выполнить здесь что-то и затем возобновить скрипт 7
resume_script 7

Можно из одного скрипта устанавливать переменные в другом. Для этого также используется номер скрипта в котором надо изменить переменную. Например:
set #var.7 325

т.е в 7 скрипте в переменную #var установится число 325.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 29.1.2018, 23:11
Сообщение #3


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
Поиск десятка картинок на экране занимает секунд 5-10 времени

Картинки размером с половину экрана что ли? Как правило, на 1 картинку уходит от 16 до 100 мсек. Необязательно искать всё изображение, можно лишь небольшую часть.
Лучше всего загрузить картинки в память и искать их на скрине, сохранённом в памяти. GetImage, смотрим пример 3.
Не стоит создавать кучу скриптов, лучше продумать оптимальную логику скрипта. Тем более для одного окна. 2-3 скрипта ещё ладно, но больше это уж слишком. Сами же запутаетесь.
Смотрите примеры:
Timer
Start_script
Переменные_из_других_скриптов
Клики очередь






Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
фонарик
сообщение 29.1.2018, 23:13
Сообщение #4


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



А еще совет для быстроты работы скрипта: не оставляйте рабочий скрипт активным в пилоте. Плюсаните в окошке на новый пустой скрипт, и тогда запущенный будет работать быстрее.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 29.1.2018, 23:53
Сообщение #5


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
А еще совет для быстроты работы скрипта: не оставляйте рабочий скрипт активным в пилоте. Плюсаните в окошке на новый пустой скрипт, и тогда запущенный будет работать быстрее.

Это пофиксили в версии 2.39.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Varlock
сообщение 30.1.2018, 0:43
Сообщение #6


**

Neophyte
Сообщений: 31
Регистрация: 17.1.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 18.789



Большое спасибо (IMG:style_emoticons/default/smile.gif) Возможности вкусные буду пробовать (IMG:style_emoticons/default/smile.gif)

Отдельное спасибо за GetImage, его мне тоже не хватало (IMG:style_emoticons/default/smile.gif) (картинки пикселей 50 на 50 у меня, сколько конкретно по таймеру они ищутся я не проверял, но чисто по ощущениям, находит стартовую метку он примерно через пол секунды - секунду от старта скрипта. я область поиска внутри окна не ограничиваю - мало ли, как я окно после запуска растяну...)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 30.1.2018, 9:06
Сообщение #7


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
картинки пикселей 50 на 50 у меня,

это ОЧЕНЬ много. Оно просто тсолько не нужно. Нолик уберите и будет в самый раз. По поводу распрарллеливания поиска изображений есть одна важная тонкость. Дело в том, что из-за своей природы невозможно полностью распараллелить поиск. Возможно что-то иначе при поиске по хендлу (там метод захвата иной, актуально только для самых последний версий).


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.3.2024, 19:47
Designed by Nickostyle