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

0 Members and 13 Guests are viewing this topic.

MIG29

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Re: Потоки
« Reply #45 on: December 10, 2014, 11:29:42 PM »
запись в лог, вывод в трей, после отладки всё это переводится в комментарии, а при необходимости опять настроить раскоменчивается кнопкой редактора.

1500 строк + внешние файлы. Какая строка зависла не видно. Print можно вставить в каждую строку как макрос , но нужно чтобы в лог выводилось номер строки.
Раньше была такая возможность (номер строки)?!
if_picture_in - зло

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Потоки
« Reply #46 on: December 11, 2014, 10:17:38 AM »
Была... но не работала  :) ещё на 4.5 - 4.6


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Потоки
« Reply #47 on: December 23, 2014, 04:59:03 PM »
Развлечения. Скрипт называется Дежа вю (Deja Vu)
Практического применения пока не нашёл.
Code: (clickermann) [Select]
LOGSHOW (1)
WNDSIZE(WNDFIND("Лог"),250,110)

THREAD(log_glue, 1)
   LOGSHOW (1, $_xmouse+10,$_ymouse+18)
   WAITMS(10)
END_THREAD

THREAD(SCREEN, 1)
   GETSCREEN
   LOGCLEAR
   LOGWRITE ("X,Y: ", $_xmouse, ",", $_ymouse)
   LOGWRITE ("Цвет: ",PXL($_xmouse,$_ymouse))
   LOGWRITE ("hWND: ", HGET($_xmouse,$_ymouse))
   WAITMS(200)
END_THREAD

WHILE(1)
   WAIT(3600)
END_CYC

Вот ещё такой вариант, можно использовать при закрытом редакторе или для вывода значения переменных в реальном времени.
Code: (clickermann) [Select]
LOGSHOW (1, $_xmax-250, $_ymax-70-110)
WNDSIZE(WNDFIND("Лог"),250,110)
$pos = 0

THREAD(log_glue, 1)
   IF(($pos = 0) & ($_xmouse > $_xmax-250) & ($_ymouse > $_ymax-180) & ($_ymouse < $_ymax-70))
      LOGSHOW (1, 0, $_ymax-70-110)
      $pos = $pos^1
   END_IF
   IF(($pos = 1) & ($_xmouse < 250) & ($_ymouse > $_ymax-180) & ($_ymouse < $_ymax-70))
      LOGSHOW (1, $_xmax-250, $_ymax-180)
      $pos = $pos^1
   END_IF
   WAITMS(30)
END_THREAD

THREAD(SCREEN, 1)
   GETSCREEN
   LOGCLEAR
   LOGWRITE ("X,Y: ", $_xmouse, ",", $_ymouse)
   LOGWRITE ("Цвет: ",PXL($_xmouse,$_ymouse))
   LOGWRITE ("hWND: ", HGET($_xmouse,$_ymouse))
   WAITMS(200)
END_THREAD

WHILE(1)
   WAIT(3600)
END_CYC
« Last Edit: December 25, 2014, 12:42:50 PM by Vint »


АНТИКЛАН

  • Активный участник
  • ***
  • Posts: 111
    • View Profile
Re: Потоки
« Reply #48 on: February 12, 2015, 03:18:12 AM »
Могут ли потоки повесить целевую программу?
Если в потоке уже есть задержки обязательно ли ставить задержку перед END_THREAD?

Просто у меня при работе скрипта с потоками зависает игра и закрывается если постоянно не держать включенным скрипт то все нормально.
« Last Edit: February 12, 2015, 03:20:02 AM by АНТИКЛАН »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Потоки
« Reply #49 on: February 12, 2015, 09:39:30 AM »
Если в потоке уже есть задержки обязательно ли ставить задержку перед END_THREAD?
А при чём здесь END_THREAD? Если в потоке есть задержки и они там работают, то зачем?
А если они у тебя внутри условий которые могут и не выполнится, то нужно добавить в вариант ELSE или дополнительно.


АНТИКЛАН

  • Активный участник
  • ***
  • Posts: 111
    • View Profile
Re: Потоки
« Reply #50 on: February 12, 2015, 07:46:44 PM »
Могут, по сути поток отдельный кликер, участвующий в распределнии вычислительных ресурсов компьютера с другими потоками и стороними программами.
К примеру тут отдельные товарищи запускали 5 потоков и в каждом раз 20 в секунду делали обновление буфера и цветокорекцию, а потом удивлялись почему иногда тормозит. Каждый скрипт можно оптимизировать и ускорить, зная его недостатки и имея желание тратить силы и время на отладку-доводку и так " работающего" скрипта.

Есть ли уже готовые методы оптимизации. Не хотелось бы тратить время на открытие Америки заного... :)

А при чём здесь END_THREAD? Если в потоке есть задержки и они там работают, то зачем?
А если они у тебя внутри условий которые могут и не выполнится, то нужно добавить в вариант ELSE или дополнительно.

А если внутри цикла который выполняется всегда при запуске потока?
« Last Edit: April 15, 2018, 06:07:45 PM by АНТИКЛАН »

АНТИКЛАН

  • Активный участник
  • ***
  • Posts: 111
    • View Profile
Re: Потоки
« Reply #51 on: February 14, 2015, 07:30:50 PM »
Тут речь действительно об открытии Омерики.
Скрипт принято вначале написать, а потом проанализировать работоспособность и оптимизировать.
Оптимизировать обстрактные потоки,  слишком расплывчатая задача.

А если внутри цикла не ставить задержек, то он способен повесить программу и без потоков.

Мне кажется ты неверно определил основную проблему, эта строка говорит, что у тебя учтены не все ситуации возможные при работе скрипта. По описанию похоже на падение плагина браузерки, клиентские игры гораздо менее склонны закрываться по пустякам. Решай свою конкретную, маленькую задачу, зачем раздувать её до "Общих вопросов" в теме "Учебные Статьи"?

Хорошо
« Last Edit: April 15, 2018, 06:18:58 PM by АНТИКЛАН »

Passion

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Re: Потоки
« Reply #52 on: February 25, 2015, 10:17:15 PM »
Спасибо, этот теперь работает. Но только если делать окно активным, а если вместо WNDBUMP поставить HSET - то снова не работает. Мне из 2х и более окон одновременно нужно скопировать информацию в 1 окно.

Я не понял... Ты отдельные потоки хочешь привязать к разным окнам в одном скрипте чтоли? Я конечно вообще не в курсе, но мне кажется, что к окну у нас привязывается не скрипт, а сам кликер. То есть, внутри кликера макрос не сможет разные потоки привязать к разным окнам.

Пока не было потоков, у меня был отлично работающий скрипт на 7 окон:
Code: [Select]
$HW_Bot_A=459570
$HW_Bot_B=263596
$HW_Bot_C=132600
$HW_Bot1=132662
$HW_Bot2=263632
$HW_Bot3=460248
$HW_Bot4=31197714

hset($HW_Bot_A, 1) //         3 min
#include "Bot_A_fast.cms"
hset($HW_Bot_B, 1) //       4 min
#include "Bot_B_shifted_farming.cms"
hset($HW_Bot_C, 1) //   3 min
#include "Bot_C_shifted_farming.cms"
hset($HW_Bot1, 1) //       2.5 min
#include "cylon003_shifted_bot1.cms"

for($var=0, $var < 17)
//hset($HW_Bot1, 1)
//#include "lucky_wheel_1.cms"
hset($HW_Bot2, 1)
#include "lucky_wheel_1.cms"
hset($HW_Bot3, 1)
#include "lucky_wheel_1.cms"
hset($HW_Bot4, 1)
#include "lucky_wheel_1.cms"
waitms(7000)
end_cyc
4 бота делали каждый своё действие (фармили) и 3 бота крутили рулетку. У всех временные задержки разные. Каждый "работал" в своём окне, но делалось это всё последовательно и никаких пересечений не было. С появлением потоков и заявлением, что они по-сути как несколько запущенных кликеров, хочу уточнить, возможно ли реализовать работу через потоки с более тонкой настройкой временных интервалов. Понятно, что если они не совпадают (времена), то пересечения будут и потоки(ака кликеры) будут слать команды каждый в своё окно. Насколько эти радужные мечты реальны ?
На всякий случай приведу код 1 include:
Code: [Select]
$x1_shift=5
$y1_shift=0
$x2_shift=0
$y2_shift=0
$x3_shift=0 //close mailbox, instance #,
//наводимся по MyTools 1300, 835 - итог 45, 80 x1, y1
//наводимся по EZ rewards 295 255 - итог -65, 10 x2, y2
$xx=900+$x3_shift //предполагаю, что как "close mailbox"
$yy=420+$y2_shift //
  LCLICK($xx,$yy) //OK na vsyakih druzei
waitms(150)
$xx=1065+$x3_shift //предполагаю, что как "close mailbox"
$yy=580+$y2_shift //
  LCLICK($xx,$yy) //close combat message
waitms(500)
  LCLICK(1160,755) //zapravka
waitms(1000)
  LCLICK(1160,665) //zapravka
waitms(1000)
  LCLICK(680,200) //zapravka
waitms(1000)
  LCLICK(1050,200) //zapravka
waitms(500)
$xx=365+$x2_shift //300 x2
$yy=300+$y2_shift //310 y2
  LCLICK($xx,$yy) //EZ rewards
waitms(500)
$xx=1255+$x1_shift //1300 x1
$yy=755+$y1_shift //835 y1
  LCLICK($xx,$yy) //mytools
waitms(1000)
$xx=1255+$x1_shift //1300 x1
$yy=685+$y1_shift //770 y1
  LCLICK($xx,$yy) //mailbox
waitms(1000)
$xx=800//+$x_shift //800 0
$yy=310+$y2_shift //320 y2
  LCLICK($xx,$yy) //last mess
waitms(3500)
$xx=965//+$x_shift //965 0
$yy=575+$y2_shift //585 y2
  LCLICK($xx,$yy) //get all
waitms(500)
$xx=580//+$x_shift //580 0
$yy=575+$y2_shift //585 y2
  LCLICK($xx,$yy) //delete last message
waitms(500)
$xx=1158+$x3_shift //1147 x3
$yy=132+$y_shift //142 y2
  LCLICK($xx,$yy) //close mailbox
waitms(1000)
$xx=355+$x2_shift //290 x2
$yy=245+$y2_shift //255 y2
  LCLICK($xx,$yy) //tutorials
waitms(1000)
$xx=1115//+$x_shiftr //1120 0
$yy=290+$y2_shift //300 y2
  LCLICK($xx,$yy) //instances
waitms(1000)
$xx=600//+$x_shift //600 0
$yy=165+$y2_shift //175 y2
  LCLICK($xx,$yy) //normal
waitms(1000)
//  LCLICK(585,510) //10 instance
//  LCLICK(640,485) //12 instance
//  LCLICK(760,555) //14
// 705,355 - #7
//  LCLICK(695,425) //15
//  LCLICK(815,220) //19 instance
// 840, 285 //22 instance
// 810, 550 //27
// 880, 430 //28
// 888, 560 //30 instance
$xx=840+$x3_shift //870 x3
$yy=285+$y2_shift //440 y2
  LCLICK($xx,$yy) //selected instance
waitms(1000)
$xx=1040//+$x_shift //1040 0
$yy=235+$y2_shift //245 y2
  LCLICK($xx,$yy) //increase fleet
waitms(4000)
$xx=700//+$x_shift // 0
$yy=280+$y2_shift //290 y2
  LCLICK($xx,$yy) // #1
waitms(500)
$xx=870//+$x_shift // 0
$yy=280+$y2_shift //290 y2
  LCLICK($xx,$yy) // #2
waitms(500)
$xx=1060//+$x_shift // 0
$yy=280+$y2_shift //290 y2
  LCLICK($xx,$yy) // #3
waitms(500)
$xx=700//+$x_shift // 0
$yy=380+$y2_shift //390 y2
  LCLICK($xx,$yy) // #4
waitms(500)
$xx=870//+$x_shift // 0
$yy=380+$y2_shift //390 y2
  LCLICK($xx,$yy) //$5
waitms(500)
$xx=1060//+$x_shift // 0
$yy=380+$y2_shift //390 y2
  LCLICK($xx,$yy) //#6
waitms(500)
$xx=700//+$x_shift // 0
$yy=480+$y2_shift //390 y2
  LCLICK($xx,$yy) // #7
waitms(500)
$xx=870//+$x_shift // 0
$yy=480+$y2_shift //390 y2
  LCLICK($xx,$yy) //#8
waitms(500)
$xx=1090//+$x_shift //1090 0
$yy=575+$y2_shift //585 y2
  LCLICK($xx,$yy) //OK - podtverzhdaem commanderov
waitms(1000)
$xx=1040//+$x_shift //1040 0
$yy=190+$y2_shift //200 y2
  LCLICK($xx,$yy) //start instance

И ещё вопрос по горячим кнопкам. Хотел бынастроить запуск и остановку разныз потоков на кнопках :)
Например, мне надо при работе остальных потоков что-то выполнить в первом. Я его останавливаю, делаю внутри-игровые действия, а остальные при этом продолжают нажимать кнопки, как ни в чём не бывало... Когда закончу делать свои дела - запускаю обратно остановленный поток.
Такое сейчас возможно ?
Искал в новом хелпе про горячие кнопки, но ничего подобного не нашёл...
Спасибо за пояснения.
Вячеслав.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Потоки
« Reply #53 on: February 25, 2015, 10:32:04 PM »
Потоки пока еще очень сырые.
GETSCREEN не изолирован.
Переменные не изолированы.
Привязка одна на весе потоки.
Поток возможно поставить на паузу, но нельзя перезапустить.

Короче что то не сложное можно запихнуть в поток, но пытаться распихать 4 скрипта по потокам и чтоб все работало как 4 кликера пока рано.

Будем ждать дальнейших улучшений потоков.

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: Потоки
« Reply #54 on: March 04, 2015, 02:32:15 PM »
Потоки пока еще очень сырые.
GETSCREEN не изолирован.
Переменные не изолированы.
Привязка одна на весе потоки.
Поток возможно поставить на паузу, но нельзя перезапустить.

Короче что то не сложное можно запихнуть в поток, но пытаться распихать 4 скрипта по потокам и чтоб все работало как 4 кликера пока рано.

Будем ждать дальнейших улучшений потоков.

+
Я не ду... Потому и не бу...

KERK

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: Потоки
« Reply #55 on: April 03, 2015, 12:19:30 PM »
Доброго времени суток!
У меня два окна оба полностью помещаются на рабочем столе. В кликере два потока один на одно окно второй на второе все работает нормально!
Вопрос!
Правильно я понял что возможности щас нет привязать каждый поток к своему окну чтобы в это время можно было работать на компьютере? Или есть такая возможность или это как то можно обойти другими способами?
Требуется: два окна в каждом происходят свои действия и в этот момент например работать в интернете.
Заранее спасибо за ответ!

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Потоки
« Reply #56 on: April 03, 2015, 01:59:19 PM »
Пока только поочередная привязка то к одному окну то к другому.

NStra

  • Освоившийся
  • **
  • Posts: 45
  • Подпись под аватаром.
    • View Profile
Re: Потоки
« Reply #57 on: April 03, 2015, 02:06:45 PM »
KERK
Да, привязать сразу к двум окнам нельзя.
Например функция Getscreen ,в любом потоке,
будет скриншотить последнее привязанное окно, а не 2-а сразу.
Можно наверное помучиться и сделать чтоб программа поочередно выполняла действия сначала на одном окне, потом на другом, все время привязывая и отвязывая.
Только от потоков в этом случае пользы не будет.

Лучше использовать 2-е программы сразу, вот тебе изолированные потоки.
« Last Edit: April 03, 2015, 02:08:21 PM by NStra »
Тут должна быть подпись...

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: Потоки
« Reply #58 on: April 03, 2015, 04:21:18 PM »
Например функция Getscreen ,в любом потоке,
будет скриншотить последнее привязанное окно
Всем привет! Я че-то не понял... Пока меня не было, сделали таки, чтобы кликер в привязке экран видел? ))
Я не ду... Потому и не бу...

NStra

  • Освоившийся
  • **
  • Posts: 45
  • Подпись под аватаром.
    • View Profile
Re: Потоки
« Reply #59 on: April 03, 2015, 04:29:44 PM »
Code: [Select]
$N=WNDFIND ("screens")
HSET($N,1)
GETSCREEN
SCREENSHOT
HALT
Result:
« Last Edit: April 03, 2015, 04:34:49 PM by NStra »
Тут должна быть подпись...