Автор Тема: Потоки  (Прочитано 50079 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Johnny

  • Создатель
  • Герой форума
  • *
  • Сообщений: 560
    • Просмотр профиля
Re: Потоки
« Ответ #30 : Ноябрь 22, 2014, 11:47:55 am »
дочерним тут обозван явно объявленный поток.
а основным - просто привычный всем скрипт без всяких конструкций

Hito

  • Герой форума
  • *****
  • Сообщений: 649
    • Просмотр профиля
Re: Потоки
« Ответ #31 : Ноябрь 22, 2014, 02:06:28 pm »
Ну да ))
Я не ду... Потому и не бу...

Kedrick

  • Освоившийся
  • **
  • Сообщений: 70
    • Просмотр профиля
Re: Потоки
« Ответ #32 : Ноябрь 23, 2014, 07:24:30 pm »
Если в скрипте работает поток, кликерман не эрегирует ни на какие внешние воздействия. При этом он не висит, скрипт работает нормально, но тыкнуть паузу уже бесполезно, только снимать задачу в диспетчере или дожидаться окончания работы скрипта. Это бага или фича?
« Последнее редактирование: Ноябрь 23, 2014, 07:44:36 pm от Kedrick »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3218
  • Котэ
    • Просмотр профиля
Re: Потоки
« Ответ #33 : Ноябрь 23, 2014, 08:14:19 pm »
Если в скрипте работает поток, кликерман не эрегирует ни на какие внешние воздействия. При этом он не висит, скрипт работает нормально, но тыкнуть паузу уже бесполезно, только снимать задачу в диспетчере или дожидаться окончания работы скрипта. Это бага или фича?

эрегирует  :o ::) ;D

Версия последняя? 4.11.001
Если да, скрипт в студию.


Луций

  • Активный участник
  • ***
  • Сообщений: 235
    • Просмотр профиля
    • Пишу скрипты на заказ:
Re: Потоки
« Ответ #34 : Ноябрь 23, 2014, 08:46:44 pm »
кто то может мне подсказать хоть один пример применения потоков в скриптах для какой нибудь игры?

Kedrick

  • Освоившийся
  • **
  • Сообщений: 70
    • Просмотр профиля
Re: Потоки
« Ответ #35 : Ноябрь 23, 2014, 09:12:18 pm »
Версия кликермана последняя.

Код: Clickermann
  1.  
  2. HSET(WNDFIND("Персонаж"),1) // находим окно
  3. WNDPOS(WNDFIND("Персонаж"),85,0) // двигаем на место
  4. WNDSIZE(WNDFIND("Персонаж"),1200,1000) // ставим размер
  5.  
  6. #include "func.cms"
  7.  
  8. THREAD(boting, 0) // основной бот
  9. #include "func.cms"
  10.   bot()
  11. END_THREAD
  12.  
  13. THREAD(rest, 1) // ежечасный перезапуск файрфокса для устранения утечки памяти
  14. #include "func.cms"  
  15.   WHILE(1 = 1)
  16.      $time = $_time_t + 3600
  17.      IF($time < $_time_t)
  18.            PRINT("рестарт")
  19.            SetThread (boting, 0) // остановить бота
  20.            KEYPRESS(#HOME)
  21.            LCLICK(710+$x,310+$y)
  22.            waiting()
  23.            HSET(WNDFIND("Персонаж"),0) // отвязаться от окна
  24.            LCLICK(1256,11) // закрыть браузер
  25.            WAIT(5)
  26.            EXECUTE("C:\Program Files (x86)\Mozilla Firefox\firefox.exe")
  27.            WAIT(10)
  28.            HSET(WNDFIND("Персонаж"),1)
  29.            WNDPOS(WNDFIND("Персонаж"),85,0)
  30.            WNDSIZE(WNDFIND("Персонаж"),1200,1000)
  31.            SetThread (boting, 1) // запустить бота
  32.            $time = $_time_t + 3600
  33.      END_IF
  34.   END_CYC
  35. END_THREAD
  36.  
  37. //=============================================
  38. nachalo() // поиск нулевой точки, привязка, рассчет смещения координат кнопок ...
  39. SetThread (boting, 1)
  40. PRINT("начал ботинг")
  41. $times1 = 0
  42. WHILE($times1 = 0)
  43.   IF(($_time_h = 1) & ($_time_m = 55)) // ботим до 1:55
  44.      SetThread (boting, 0) //в 1:55 остановка потока
  45.      PRINT("остановил ботинг")
  46.      $times1 = 1
  47.   END_IF
  48. END_CYC
  49. IF(($_time_h = 1) & ($_time_m > 55)) // если время больше 1:59 ищем попап
  50.   gift()
  51. END_IF
  52. SetThread (boting, 1) // запуск потока
  53. PRINT("начал ботинг")
  54. WHILE($_time_h < 5) // ботим до 5 утра
  55.   WAITMS(500)
  56. ELSE
  57.   SetThread (boting, 0) // после 5 остановка потока
  58.   PRINT("остановил ботинг")
  59. END_CYC
  60. bay()
  61. HSET(WNDFIND("Персонаж"),0)
  62. EXECUTE("sleep.bat")
  63. halt

Пока писал этот пост, перечитывал и подписывал комментарии, допетрил в чем проблема ))
Код: Clickermann
  1. THREAD(rest, 1) // ежечасный перезапуск файрфокса для устранения утечки памяти
  2. #include "func.cms"  
  3.   WHILE(1 = 1)
  4.      $time = $_time_t + 3600
  5.      IF($time < $_time_t)
  6.            restart()
  7.            $time = $_time_t + 3600
  8.      END_IF
  9.      WAIT(10) // !!!добавил эту паузу и все стало нормально!!!
  10.   END_CYC
  11. END_THREAD
  12.  
« Последнее редактирование: Ноябрь 23, 2014, 09:30:18 pm от Kedrick »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3218
  • Котэ
    • Просмотр профиля
Re: Потоки
« Ответ #36 : Ноябрь 23, 2014, 10:23:43 pm »
Условие
Код: Clickermann
  1. $time = $_time_t + 3600
  2. IF($time < $_time_t)
не может быть выполнено! Ты все время прибавляешь $time и в результате $time никогда не будет меньше $_time_t

Правильно так
Код: Clickermann
  1. DEFINE($time, $_time_t + 3600)
  2. IF($time < $_time_t)

Да в потоках нужно поставить общую задержку, иначе они будут сильно нагружать процессор. Зачем 10 секунд то, достаточно хотя бы 50 миллисекунд. Но в твоем случае секунда сойдет.
« Последнее редактирование: Ноябрь 23, 2014, 10:27:12 pm от Oraven »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3218
  • Котэ
    • Просмотр профиля
Re: Потоки
« Ответ #37 : Ноябрь 23, 2014, 10:36:12 pm »
кто то может мне подсказать хоть один пример применения потоков в скриптах для какой нибудь игры?

Ну например, бот выполняется в потоке 1, а в основном потоке находятся проверка на помехи, это всякого рода всплывающие сообщения. Проверка тормозит бота в потоке 1, убирает сообщение и снова продолжает поток 1.

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

Ну и самое простое, это нажимать клавиши, но у каждой клавиши своя задержка не тормозящая остальные.

Луций

  • Активный участник
  • ***
  • Сообщений: 235
    • Просмотр профиля
    • Пишу скрипты на заказ:
Re: Потоки
« Ответ #38 : Ноябрь 24, 2014, 12:15:44 am »
у меня пока недостаток производительности только в одном - быстрый поиск картинок на большом экране (например по полю бегает кабан и поворачивается 4мя сторонами, у каждой стороны есть 4 спрайта = 16 картинок) я запускаю поиск циклом всех картинок по очереди и одна фаза цикла занимает секунд 10, за это время кабан может пробежать по экрану вдоль и поперек и ниразу не попасть нужным боком в нужный цикл

колормод и область поиска помогают, но всеравно работает не достаточно быстро, потоки тут помогут?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3218
  • Котэ
    • Просмотр профиля
Re: Потоки
« Ответ #39 : Ноябрь 24, 2014, 07:36:00 am »
у меня пока недостаток производительности только в одном - быстрый поиск картинок на большом экране (например по полю бегает кабан и поворачивается 4мя сторонами, у каждой стороны есть 4 спрайта = 16 картинок) я запускаю поиск циклом всех картинок по очереди и одна фаза цикла занимает секунд 10, за это время кабан может пробежать по экрану вдоль и поперек и ниразу не попасть нужным боком в нужный цикл

колормод и область поиска помогают, но всеравно работает не достаточно быстро, потоки тут помогут?

Используй программу Unique Colors Search для вычисления уникальных пикселов моба.

MIG29

  • Освоившийся
  • **
  • Сообщений: 45
    • Просмотр профиля
Re: Потоки
« Ответ #40 : Ноябрь 25, 2014, 03:02:25 pm »
Потоки, классно.
А вот основную программу можно прерывать?

Поток можно прервать в самом себе, например:

Код: Clickermann
  1. Theard(Name1) {
  2.  
  3. /*some code here*/
  4.  
  5. SetTheard(Name1, 0);
  6.  
  7. }
if_picture_in - зло

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3218
  • Котэ
    • Просмотр профиля
Re: Потоки
« Ответ #41 : Ноябрь 25, 2014, 03:21:40 pm »
А вот основную программу можно прерывать?
Нет.

Поток можно прервать в самом себе, например:
Конечно можно
Код: Clickermann
  1. THREAD(Name1, 1)
  2.   // код
  3.  
  4.   SETTHREAD (Name1, 0)
  5. END_THREAD

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3151
  • Лечу куда хочу. cman 4.13.014x32, xp32
    • Просмотр профиля
Re: Потоки
« Ответ #42 : Ноябрь 25, 2014, 03:48:31 pm »
Потоки, классно.
А вот основную программу можно прерывать?
А основную тоже можно засунуть в поток явно.


MIG29

  • Освоившийся
  • **
  • Сообщений: 45
    • Просмотр профиля
Re: Потоки
« Ответ #43 : Ноябрь 28, 2014, 03:25:03 am »
Потоки, классно.
А вот основную программу можно прерывать?
А основную тоже можно засунуть в поток явно.

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

Аннет,  я передумал, скорее будет просто этим управлять =)
« Последнее редактирование: Ноябрь 28, 2014, 03:27:22 am от MIG29 »
if_picture_in - зло

MIG29

  • Освоившийся
  • **
  • Сообщений: 45
    • Просмотр профиля
Re: Потоки
« Ответ #44 : Декабрь 10, 2014, 11:02:30 pm »
Перенесите, пожалуйста, если не в ту тему пишу.

Вот скинул скрипт из 4.10 в 4.11.  Прежде потестил и разобрался с потоками.
Но в 4.11 не отображается текущая строка кода и вобще , такое ощущение что выполнение просто зависает...
Кто как отлаживает скрипты в новой версии, колитесь  ::)

Вроде нашел косяк.

while($x - $y)  // Работает в 4.10

4.11 захотела только так :

while( ($x - $y) > 0)
« Последнее редактирование: Декабрь 10, 2014, 11:27:17 pm от MIG29 »
if_picture_in - зло