Что нового

Оптимизация PixelSearch

OXIGEN

Новичок
Сообщения
33
Репутация
0
Здравствуйте. Мой вопрос возможно задавался уже не раз, но ответа я так и не нашёл.
Вообщем... Простейшая тема - поиск пикселя по цвету с последующем кликом по нему мышкой.
Задача - найти периодически появляющиеся на 3-5мск пиксели в разных областях экрана
Ну типа -
Код:
While 1
    $POS = PixelSearch(705, 453, 755, 480, 0xCD2D0C, 10, 1)
   If Not @error Then
   MouseClick("left",$POS [0],$POS [1], 1, 0)
   Endif
   Sleep(100)
 WEnd


Всё отлично работает пока в цикле не более 3х-4х PixelSearch. При увеличении количества поска пикселей
скрипт не успевает отрабатывать все поиски. Нужен одновременный поиск 12 пикселей в разных областях.
Ну, думаю, не критично, сделал под каждый поиск отдельный скрипт и запустил их скопом. Но нет, точно такие-же тормоза.
Процессор не загружен (5%-7% загрузка при одновременной работе 12-ти скриптов) Скрипты скомпилированы. При замере
скорости отработки скрипта, каждый последующий запущенный скрипт увеличивает время поиска ровно на себя. Вопрос.
Почему даже скомпилированные экзешники тормозят друг друга, как будто все работают в одном цикле? Да...поиск для
каждого скрипта происходит в разных частях экрана они не пересекаются. Возможно-ли, что функция использует какую нибудь
библиотеку или что-то ещё уже в скомпилированном виде и пока она занята, допустим, первым скриптом, остальные в ожидании,
отсюда и задержка?....
 

Prog

Продвинутый
Сообщения
640
Репутация
80
Для этого у экрана должна быть частота обновления не меньше 200000 Гц.
Нужен одновременный поиск 12 пикселей в разных областях.
AutoIt не поддерживает многопоточность. Нужно запустить 12 процессов скрипта или использовать альтернативные инструменты.
Скрипты скомпилированы.
Для AutoIt нет компилятора (скрипты интерпретируются) и скорость в IDE не сильно отличается от EXE.
Почему даже скомпилированные экзешники тормозят друг друга, как будто все работают в одном цикле?
Вероятно потому что PixelSearch использует функцию GetPixel, а она медленная.
Нужно сделать скрин требуемого участка экрана и искать на скрине. Это может быть быстрее, если размеры области скрина небольшие.
Я давно выкладывал библиотеку FindPixel. Она может сделать скрин области экрана и искать на этом скрине.
 
Верх