Author Topic: Потоки  (Read 87338 times)

0 Members and 2 Guests are viewing this topic.

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Потоки
« Reply #30 on: November 22, 2014, 11:47:55 AM »
дочерним тут обозван явно объявленный поток.
а основным - просто привычный всем скрипт без всяких конструкций

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: Потоки
« Reply #31 on: November 22, 2014, 02:06:28 PM »
Ну да ))
Я не ду... Потому и не бу...

Kedrick

  • Освоившийся
  • **
  • Posts: 70
    • View Profile
Re: Потоки
« Reply #32 on: November 23, 2014, 07:24:30 PM »
Если в скрипте работает поток, кликерман не эрегирует ни на какие внешние воздействия. При этом он не висит, скрипт работает нормально, но тыкнуть паузу уже бесполезно, только снимать задачу в диспетчере или дожидаться окончания работы скрипта. Это бага или фича?
« Last Edit: November 23, 2014, 07:44:36 PM by Kedrick »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Потоки
« Reply #33 on: November 23, 2014, 08:14:19 PM »
Если в скрипте работает поток, кликерман не эрегирует ни на какие внешние воздействия. При этом он не висит, скрипт работает нормально, но тыкнуть паузу уже бесполезно, только снимать задачу в диспетчере или дожидаться окончания работы скрипта. Это бага или фича?

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

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


Луций

  • Активный участник
  • ***
  • Posts: 248
  • чат в телеге: https://t.me/klickermannchat
    • View Profile
    • Пишу скрипты на заказ:
Re: Потоки
« Reply #34 on: November 23, 2014, 08:46:44 PM »
кто то может мне подсказать хоть один пример применения потоков в скриптах для какой нибудь игры?

Kedrick

  • Освоившийся
  • **
  • Posts: 70
    • View Profile
Re: Потоки
« Reply #35 on: November 23, 2014, 09:12:18 PM »
Версия кликермана последняя.

Code: (clickermann) [Select]

HSET(WNDFIND("Персонаж"),1) // находим окно
WNDPOS(WNDFIND("Персонаж"),85,0) // двигаем на место
WNDSIZE(WNDFIND("Персонаж"),1200,1000) // ставим размер

#include "func.cms"

THREAD(boting, 0) // основной бот
#include "func.cms"
   bot()
END_THREAD

THREAD(rest, 1) // ежечасный перезапуск файрфокса для устранения утечки памяти
#include "func.cms"   
   WHILE(1 = 1)
      $time = $_time_t + 3600
      IF($time < $_time_t)
            PRINT("рестарт")
            SetThread (boting, 0) // остановить бота
            KEYPRESS(#HOME)
            LCLICK(710+$x,310+$y)
            waiting()
            HSET(WNDFIND("Персонаж"),0) // отвязаться от окна
            LCLICK(1256,11) // закрыть браузер
            WAIT(5)
            EXECUTE("C:\Program Files (x86)\Mozilla Firefox\firefox.exe")
            WAIT(10)
            HSET(WNDFIND("Персонаж"),1)
            WNDPOS(WNDFIND("Персонаж"),85,0)
            WNDSIZE(WNDFIND("Персонаж"),1200,1000)
            SetThread (boting, 1) // запустить бота
            $time = $_time_t + 3600
      END_IF
   END_CYC
END_THREAD

//=============================================
nachalo() // поиск нулевой точки, привязка, рассчет смещения координат кнопок ...
SetThread (boting, 1)
PRINT("начал ботинг")
$times1 = 0
WHILE($times1 = 0)
   IF(($_time_h = 1) & ($_time_m = 55)) // ботим до 1:55
      SetThread (boting, 0) //в 1:55 остановка потока
      PRINT("остановил ботинг")
      $times1 = 1
   END_IF
END_CYC
IF(($_time_h = 1) & ($_time_m > 55)) // если время больше 1:59 ищем попап
   gift()
END_IF
SetThread (boting, 1) // запуск потока
PRINT("начал ботинг")
WHILE($_time_h < 5) // ботим до 5 утра
   WAITMS(500)
ELSE
   SetThread (boting, 0) // после 5 остановка потока
   PRINT("остановил ботинг")
END_CYC
bay()
HSET(WNDFIND("Персонаж"),0)
EXECUTE("sleep.bat")
halt

Пока писал этот пост, перечитывал и подписывал комментарии, допетрил в чем проблема ))
Code: (clickermann) [Select]
THREAD(rest, 1) // ежечасный перезапуск файрфокса для устранения утечки памяти
#include "func.cms"   
   WHILE(1 = 1)
      $time = $_time_t + 3600
      IF($time < $_time_t)
            restart()
            $time = $_time_t + 3600
      END_IF
      WAIT(10) // !!!добавил эту паузу и все стало нормально!!!
   END_CYC
END_THREAD
« Last Edit: November 23, 2014, 09:30:18 PM by Kedrick »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Потоки
« Reply #36 on: November 23, 2014, 10:23:43 PM »
Условие
Code: (clickermann) [Select]
$time = $_time_t + 3600
IF($time < $_time_t)
не может быть выполнено! Ты все время прибавляешь $time и в результате $time никогда не будет меньше $_time_t

Правильно так
Code: (clickermann) [Select]
DEFINE($time, $_time_t + 3600)
IF($time < $_time_t)

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

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Потоки
« Reply #37 on: November 23, 2014, 10:36:12 PM »
кто то может мне подсказать хоть один пример применения потоков в скриптах для какой нибудь игры?

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

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

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

Луций

  • Активный участник
  • ***
  • Posts: 248
  • чат в телеге: https://t.me/klickermannchat
    • View Profile
    • Пишу скрипты на заказ:
Re: Потоки
« Reply #38 on: November 24, 2014, 12:15:44 AM »
у меня пока недостаток производительности только в одном - быстрый поиск картинок на большом экране (например по полю бегает кабан и поворачивается 4мя сторонами, у каждой стороны есть 4 спрайта = 16 картинок) я запускаю поиск циклом всех картинок по очереди и одна фаза цикла занимает секунд 10, за это время кабан может пробежать по экрану вдоль и поперек и ниразу не попасть нужным боком в нужный цикл

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

Oraven

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

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

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

MIG29

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Re: Потоки
« Reply #40 on: November 25, 2014, 03:02:25 PM »
Потоки, классно.
А вот основную программу можно прерывать?

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

Code: (clickermann) [Select]
Theard(Name1) {

/*some code here*/

SetTheard(Name1, 0);

}
if_picture_in - зло

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Потоки
« Reply #41 on: November 25, 2014, 03:21:40 PM »
А вот основную программу можно прерывать?
Нет.

Поток можно прервать в самом себе, например:
Конечно можно
Code: (clickermann) [Select]
THREAD(Name1, 1)
   // код
   
   SETTHREAD (Name1, 0)
END_THREAD

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Потоки
« Reply #42 on: November 25, 2014, 03:48:31 PM »
Потоки, классно.
А вот основную программу можно прерывать?
А основную тоже можно засунуть в поток явно.


MIG29

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Re: Потоки
« Reply #43 on: November 28, 2014, 03:25:03 AM »
Потоки, классно.
А вот основную программу можно прерывать?
А основную тоже можно засунуть в поток явно.

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

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

MIG29

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Re: Потоки
« Reply #44 on: December 10, 2014, 11:02:30 PM »
Перенесите, пожалуйста, если не в ту тему пишу.

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

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

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

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

while( ($x - $y) > 0)
« Last Edit: December 10, 2014, 11:27:17 PM by MIG29 »
if_picture_in - зло