[Полезное] Многопоточность - Форум Cheat-Master.ru

Скидка на продавца и випа! Успей!
  • Страница 1 из 1
  • 1
Форум » Программирование » AHK Программирование » [Полезное] Многопоточность (Многопоточность)
[Полезное] Многопоточность
Rinat_NamazovДата: Среда, 14.03.2018, 22:05 | Сообщение # 1
Боец
Группа: Пользователи
Сообщений: 110
Статус: Offline
Вступление

Немногие знают что в AHK можно использовать многопоточность, хот и выглядит это странно.
Стандартный движок AHK всего лишь эмулирует многопоточность, хотя фактический она использует только один поток.
Эмуляция потоков идет по следующему принципу:
Вы нажали на горячую клавишу, начался "поток".
Вы нажали вторую горячую клавишу, но при этом 1-ый "поток" не отработал свои действия.
Тогда 1-ый "поток" приостановится, и главным "потоком" станет 2-ой, после того как он окончиться, 1-ый "поток" разморозиться и так далее.
В документации так же описано что можно ставить приоритет каждого "потока".
Но все же если скачивать какой-то слишком тяжелый файл, весь скрипт подвиснет.

Выход есть, можно подгрузить в наш исполняемый файл еще один или даже несколько интерпретаторов.
Кто не в курсе, то в AHK_H появилась возможность "компиляции" в Dll.
А заботливый HotKeyIt написал библиотеку для подгрузки голого ahk dll в наш exe.

Инструкция
Подгружать наши интерпретаторы мы можем где-то в начале, так как это занимает несколько секунд, в зависимости сколько копий вы подгрузите
После подгрузки мы можем отправить ему, свой код и продолжить работать в главном потоке.
Также если на уже работающий интерпретатор кинуть код повторно, он прекратить выполнять текущий код и выполнить новый, из этого следует мы можем например выводить MsgBox и сами закрывать его, не ожидая закрытия MsgBox пользователем.
Все потоки автоматический завершаются после окончания выполнения кода, если не применить директиву "#Persistent"
Но есть только один минус, эти dll файлы работают на основе AHK_H, а он из-за не пофикшеного до сих пор бага, работает не у всех, обычно на Windows 10.
И если даже скрипт запускается, есть вероятность того что все символы превратятся в вопросики ("?????").
В архиве, находящимся во вложении прилагаю все библиотеки и пример кода.
Так же если вы компилируете свой скрипт, обязательно включите dll в ресурсы своего exe.

Код
FileInstall, AutoHotkey.dll, AutoHotkey.dll

Подгрузить AutoHotkey.dll можно следующим кодом:
Код
AhkThread := AhkDllThread("AutoHotkey.dll")

А отправить ей на выполнение код:
Код
AhkThread.ahktextdll("MsgBox, Test")

А удобно записывать код, можно так:
Код
code =
(
MsgBox, Test
Test_Var := 228
MsgBox, Test Var: %Test_Var%
)

Но можно и в другов виде хранить, например хранить код в HEX'e и переводить в String во время отправки, т.к на некоторые символы AHK будет ругаться.

Список доступных методов взаимодействия с потоками.
Выполняются они по следующему виду:
Код
Переменная := AhkDllThread("AutoHotkey.dll") ; Подгрузка интерпретатора
Переменная.Метод(Переменные при необходимости)



ahkdll - Загрузить новый поток с кодом из файла, текущий поток будет прекращен.
ahktextdll - Загрузить новый поток с кодом из строки/памяти/переменной, текущий поток будет прекращен.
ahkReady - Возвращает 1 (True), если поток выполняется в данное время. Возвращает 0 (False) если поток не выполняется в данное време.
ahkTerminate - Завершить поток.
ahkReload - Перезагрузить поток, будет использоваться последний код с ahkdll или ahktextdll.
ahkFunction - Вызывать функцию из потока через SendMessage.
ahkPostFunction - Вызывать функцию из потока через PostMessage.
ahkExecuteLine - Выполняет код из определенной строки в потоке.
ahkLabel - Вызвать Goto (PostMessage) или GoSub (SendMessage) в потоке
ahkFindFunction - Найти функцию в потоке и возвратить его указатель.
ahkFindLabel - Найти метку в потоке и возвратить его указатель.
addFile - Добавить и при необходимости выполнить в потоке дополнительный код из файла.
addScript - Добавить и при необходимости выполнить в потоке дополнительный код из строки/памяти/переменной.
ahkExec - Временно выполнить в потоке код из строки/памяти/переменной.
ahkassign - Присвоить значение переменной или указатель на переменную в потоке.
ahkgetvar - Получить значение из переменной в потоке.
ahkPause - Поставить поток на паузу.


Познакомится с методом поближе можно на официальном сайте с документацией.
(Нажмите на метод)

Скачать: *ТыК*


Сообщение отредактировал Rinat_Namazov - Четверг, 15.03.2018, 17:53
Последние товары с игрового магазина:
Найти еще что-нибудь в магазине:
DworkinДата: Среда, 14.03.2018, 23:42 | Сообщение # 2
Боец
Группа: Пользователи
Сообщений: 107
Статус: Offline
Сам собирал все библиотеки(инклуды) в одно место или откуда-то скачал?)
Расскажи как сделать общую переменную для потоков.
Последние товары с игрового магазина:
Найти еще что-нибудь в магазине:
Rinat_NamazovДата: Четверг, 15.03.2018, 00:16 | Сообщение # 3
Боец
Группа: Пользователи
Сообщений: 110
Статус: Offline
Цитата Dworkin ()
Сам собирал все библиотеки(инклуды) в одно место или откуда-то скачал?)

Первый раз о ahk dll увидел на офф.сайте ахк год назад.
Но тогда мало чё знал вообще в принципе, т.к старый форум ахк ломали и все библиотеки слились.
Ну можно скачать ручную установку AHK H там в папке lib есть все файлы, AutoHotkey.dll ansi в win32a. Да и они на гитхабе разбросаны.
Ток сегодня подумал выложить суда это.

Цитата Dworkin ()
Расскажи как сделать общую переменную для потоков.

Самый тупой способ это ini файлы, ещё умнее это реестр.
Ну как я думаю лучше через память, т.е strput и strget.
Потом может нашаманю.


Сообщение отредактировал Rinat_Namazov - Четверг, 15.03.2018, 00:23
Последние товары с игрового магазина:
Найти еще что-нибудь в магазине:
WyareriДата: Четверг, 15.03.2018, 01:20 | Сообщение # 4
Боец
Группа: Пользователи
Сообщений: 57
Статус: Offline
Словами трудно выразить мою благодарность.
Я уже так задолбался с однопоточностью.
Респект.
Последние товары с игрового магазина:
Найти еще что-нибудь в магазине:
DworkinДата: Четверг, 15.03.2018, 02:27 | Сообщение # 5
Боец
Группа: Пользователи
Сообщений: 107
Статус: Offline
Я сам не так уж давно искал и методом тыка собирал то что бы работало именно на AHK_L. Подумал что может ты мою сборку нашел.
Цитата Dworkin ()
Расскажи как сделать общую переменную для потоков.

Есть же ObjShare.


Сообщение отредактировал Dworkin - Четверг, 15.03.2018, 02:28
Последние товары с игрового магазина:
Найти еще что-нибудь в магазине:
МорякДата: Четверг, 15.03.2018, 03:05 | Сообщение # 6
Новичок
Группа: Заблокированные
Сообщений: 24
Статус: Offline
норм тема! tongue

Аккаунт подтверждён [CM]Durman
Последние товары с игрового магазина:
Найти еще что-нибудь в магазине:
Rinat_NamazovДата: Четверг, 15.03.2018, 17:53 | Сообщение # 7
Боец
Группа: Пользователи
Сообщений: 110
Статус: Offline
Цитата Dworkin ()
Расскажи как сделать общую переменную для потоков.


ahkassign - Присвоить значение переменной или указатель на переменную в потоке.
ahkgetvar - Получить значение из переменной в потоке.
Последние товары с игрового магазина:
Найти еще что-нибудь в магазине:
Форум » Программирование » AHK Программирование » [Полезное] Многопоточность (Многопоточность)
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума
Последнии темы Читаемые темы Лучшие пользователи Новые пользователи
⚡Скупка/Продажа виртов AR... [Jb[7762]]

Продаю вирты на Diamond R... [winten_xyz]

Advance RED 14 LVL [DarkKr]

[WoT]Личный акк, МНОГО ис... [Дежавю]

Жирный аккаунт Diamond RP... [aromanovich]

Продам личный STEAM аккау... [Di4aRrA]

►Набираю спамеров на кейс... [Keilen222]

Продажа валюты MTA CCD Pl... [stepanamz]

[stepanamz]

[Diamond-Rp] AutoBuy [Romka1337]

✅⛔ Продажа аккаунтов SVL,... [MoreMoney]

✅✅⛔ Продажа виртов SVL FL... [MoreMoney]

[1]>[0.3z][RUS] S0beit modified by MishaN [10001]

[2]>Курилка [10000]

[3]>Поиск CLEO скриптов | Вопросы по клео скриптам [9988]

[4]>Флудильная [9936]

[5]>Курилка [9688]

[6]>Курилка [9614]

[7]>RakBot - Качай аккаунты не напрягаясь! [9603]

[8]>Общение читеров [CM] [9546]

[9]>S0beit - pr9n project for samp 0.3.7 [9490]

[10]>Часто задаваемые вопросы... [8225]

[11]>Скуплю Advance по 300р за 1кк и DIamond по 250р [7624]

[12]>[0.3.7][RUS] Sobeit modified by MishaN [6239]

[1]>АК_47 [31537]

[2]>GеNius [6975]

[3]>[CM]Russel [5524]

[4]>romka619 [5004]

[5]>[CM]AGRESSOR [4644]

[6]>Сэс [4405]

[7]>Snake_Firm [4351]

[8]>Artem_Buero [4186]

[9]>[CM]Durman [3125]

[10]>iMaddy [2859]

[11]>sky_Woker [2856]

[12]>[CM]Рафаэль [2757]

[13]>Sa1nteD [2678]

[14]>Ch0c0Cube [2446]

[15]>BY [2343]

Triumfator10 [19.06.2018|07:36]

dosi0001 [19.06.2018|06:16]

WalterKrewaz [19.06.2018|06:05]

aromanovich [19.06.2018|05:53]

iDrill [19.06.2018|05:36]

arsenkiy [19.06.2018|03:56]

Taxidermied-Owl [19.06.2018|02:36]

Arsen_sagatov [19.06.2018|01:31]

maxkost74 [19.06.2018|01:15]

zimmer9494 [19.06.2018|01:02]

kseon31 [19.06.2018|00:52]

Gradiuslll [19.06.2018|00:42]

GonwikHokage [19.06.2018|00:41]

balenciaga8008 [19.06.2018|00:33]

krtek555 [19.06.2018|00:30]


CM Team © 2009-2018 Администрация не несёт ответственности за размещённые материалы. Условия пользования
Все материалы предоставлены в ознакомительных целях и администрация предлагает удалить их после ознакомления.

Положение о защите персональных данных на сайте, Пользовательское соглашение, Договор оказания услуг.