Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Многопоточность

Страниц (1): [1]
 

1. DeLiberate - 02 Января, 2015 - 07:01:48 - перейти к сообщению
Есть код:
start:
проверяем наличие изображения 'A' в области 'OA', если есть - жмем кнопку 'a';
проверяем наличие изображения 'B' в области 'OB', если есть - жмем кнопку 'b';
проверяем наличие изображения 'C' в области 'OC', если есть - жмем кнопку 'c';
и так далее...
goto start;
алгоритм такой:
a;
b;
c;
a;
b;
c;


Проблема: если, например, в данный момент скрипт проверяет область 'B' и в этот же момент искомое изображение появится в области 'A' - кнопка 'а' не нажмется.;
Вопрос: как организовать параллельное выполнение функций поиска? Что то вроде:
a b c;
a b c;




Еще вопрос:
Что быстрее, при условии, что области поиска одинаковы
  • findimage //размер 2x2
  • getcolor //по 1 пикселю, берем 4 раза , для точности
  • findheapcolor //4 пикселя
  • scanpixel //по 1 пикселю, берем 4 раза , для точности
    (Добавление)
    код (Отобразить)

    (Добавление)
    код_второй кусок (Отобразить)
  • 2. Kibor - 02 Января, 2015 - 09:24:18 - перейти к сообщению
     DeLiberate пишет:
    Что быстрее

    findimage

    многопоточности нет. она и не нужна тут.
    есть таймер(для просмотра ссылки Вам необходимо авторизоваться)
     DeLiberate пишет:
    Проблема: если, например, в данный момент скрипт проверяет область 'B' и в этот же момент искомое изображение появится в области 'A' - кнопка 'а' не нажмется.;


    если есть из. B
    {
    если нет из. A
    {
    наж. a
    }
    }

    так возможно?
    3. DeLiberate - 02 Января, 2015 - 10:13:31 - перейти к сообщению
     Kibor пишет:

    если есть из. B
    {
    если нет из. A
    {
    наж. a
    }
    }

    так возможно?

    То есть:
    Спойлер (Отобразить)

    Я верно понял? Если так, то это делает только хуже, в плане точности.


    С таймерами:
    code (Отобразить)

     Kibor пишет:
    Когда наступает время срабатывания управление передается в блок таймера.

    Таким образом, если таймер сработает, например тут:
    CODE:
    keydown('q');
    pause (v); //вот тут, не успев отпустить кнопку
    keyup('q');

    то все пойдет крахом.
    Какие еще варианты?
    4. Kibor - 02 Января, 2015 - 10:25:38 - перейти к сообщению
     DeLiberate пишет:
    то все пойдет крахом.

    ну а с многопоточностью не пойдет?

     DeLiberate пишет:
    Если так, то это делает только хуже, в плане точности.

    я не знаю что имеется в виду под точностью в данном случае.
    ну зная точной задачи ничего не скажу тут
    5. DeLiberate - 02 Января, 2015 - 10:36:29 - перейти к сообщению
     Kibor пишет:
     DeLiberate пишет:
    то все пойдет крахом.

    ну а с многопоточностью не пойдет?
     DeLiberate пишет:
    Если так, то это делает только хуже, в плане точности.

    я не знаю что имеется в виду под точностью в данном случае.
    ну зная точной задачи ничего не скажу тут



    Тут проблема в чем: если тут сработает таймер,
    CODE:
    keydown('q');
    pause (v); //вот тут, не успев отпустить кнопку
    keyup('q');

    то будет выполнятся код таймера, а этот будет ждать.
    Если выделить каждому таймеру свой поток - таких конфликтов не может быть.


    Игра в ВК "Flash guitar hero"
    скрипт ищет ноты, если находит - жмет.


    всего пять нот, каждая может быть трех цветов - отсюда три проверки на ноту * на пять нот = 15 "findimage"


    процессор грузит не сильно, но
    если ноты идут быстро, то получается
     Цитата:
    если, например, в данный момент скрипт проверяет область 'B' и в этот же момент искомое изображение появится в области 'A' - кнопка 'а' не нажмется.;
    .
    Вот и ищу оптимальный алгоритм работы.
    (Добавление)
     DeLiberate пишет:
     Kibor пишет:
     DeLiberate пишет:
    то все пойдет крахом.

    ну а с многопоточностью не пойдет?
     DeLiberate пишет:
    Если так, то это делает только хуже, в плане точности.

    я не знаю что имеется в виду под точностью в данном случае.
    ну зная точной задачи ничего не скажу тут



    Тут проблема в чем: если тут сработает таймер,
    CODE:
    keydown('q');
    pause (v); //вот тут, не успев отпустить кнопку
    keyup('q');

    то будет выполнятся код таймера, а этот будет ждать.
    Если выделить каждому таймеру свой поток - таких конфликтов не может быть.


    Игра в ВК "Flash guitar hero"
    скрипт ищет ноты, если находит - жмет.


    всего пять нот, каждая может быть трех цветов - отсюда три проверки на ноту * на пять нот = 15 "findimage"


    процессор грузит не сильно, но
    если ноты идут быстро, то получается
     Цитата:
    если, например, в данный момент скрипт проверяет область 'B' и в этот же момент искомое изображение появится в области 'A' - кнопка 'а' не нажмется.;
    .
    Вот и ищу оптимальный алгоритм работы.

    Еще вопрос, про : какой тип переменной может принимать параметр "Процент_совпадений_достаточный_для_идентификации" в функции findimage
    6. Kibor - 02 Января, 2015 - 10:51:06 - перейти к сообщению
     DeLiberate пишет:
    Тут проблема в чем: если тут сработает таймер,
    CODE:
    keydown('q');
    pause (v); //вот тут, не успев отпустить кнопку
    keyup('q');

    то будет выполнятся код таймера, а этот будет ждать.
    Если выделить каждому таймеру свой поток - таких конфликтов не может быть.


    ну это обходится флагами.
    CODE:
    int f1=0, f2=0, f3=0;

    таймер(0,1)
    {
    if (f2==0 && f3==0)
    {
    if (рис a)
    {
    f1=1;
    keydown('q');
    pause (v);
    keyup('q');
    f1=0;
    }
    }
    }
    таймер(1,1)
    {
    if (f1==0 && f3==0)
    {
    if (рис b)
    {
    f2=1;
    keydown('e');
    pause (v);
    keyup('e');
    f2=0;
    }
    }
    }
    таймер(2,1)
    {
    ............
    }


    иль простым key('e');
    паузу в настро йках кибор установить.





    короче суть в быстрой одновременной проверке?
    тогда искать findimage по заранее сделанном скрине как(для просмотра ссылки Вам необходимо авторизоваться) (Добавление)
     DeLiberate пишет:
    какой тип переменной может принимать параметр "Процент_совпадений_достаточный_для_идентификации" в функции findimage

    int 0-100
    7. DeLiberate - 02 Января, 2015 - 11:04:08 - перейти к сообщению
     Kibor пишет:

    ну это обходится флагами.
    Спойлер (Отобразить)


    короче суть в быстрой одновременной проверке?
    тогда искать findimage по заранее сделанном скрине как(для просмотра ссылки Вам необходимо авторизоваться) (Добавление)
    int 0-100

    Интересно, пошел пробовать screen. Спасибо!

    Powered by ExBB FM 1.0 Final