Что нового

[Процессы] Можно ли запускать обработчики разных HotKey параллельно?

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
нет.
вот посмотри
http://autoit-script.ru/index.php/topic,8140.msg55188.html#msg55188
 
Автор
M

Medved

Новичок
Сообщения
27
Репутация
0
Это я понял, но может есть волшебная инструкция, чтоб они параллельно запустились? Как тогда построить программу, чтобы имитировать параллельную работу? :scratch:
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Ой, Medved, так это ж ты в той теме был!
Суть HotKey(читай "суть прерывания") - всё остановить и выполнить меня.
То есть о параллельной работе речь не идёт.

Вообще-то есть у меня один бот который состоит из двух модулей, работающих параллельно...
Но достигается это за счет запуска двух exe-шников.
:laugh:
 
Автор
M

Medved

Новичок
Сообщения
27
Репутация
0
Да, но прерывания могут быть быстрыми, щелкать флаги и выходить. А в теле крутиться микроцикл. Типа как параллелизм в ОС устроен. Или сие слишком уныло реализовывать?
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Вот тут решали похожую проблему http://autoit-script.ru/index.php/topic,2899.0.html
Как видишь делали запуск нескольких процессов (хотя и запускали их из одного основного процесса)
 
Автор
M

Medved

Новичок
Сообщения
27
Репутация
0
Не то немного, да и запускается там грубо. Тут бы нити создать или чо-нить в этом духе. Ладно, я подумаю тогда на досуге как переделать код, чтобы была псевдо параллельность.


Добавлено:
Сообщение автоматически объединено:

Вот так по идее должно работать. Каждая функция должна работать "быстро". Если нужно спать, то делается пропуск тиков основного цикла.

Код:
Global $key1 = 0
Global $key2 = 0
...
Global $keyn = 0

HotKeySet('{key1}', 'ToggleKey1')
HotKeySet('{key2}', 'ToggleKey2')
...
HotKeySet('{keyn}', 'ToggleKeyn')
HotKeySet('^q', 'Terminate')

Func func1()
	if $key1 Then
		...
	EndIf
EndFunc

Func func2()
	if $key1 Then
		...
	EndIf
EndFunc

....

Func funcn()
	if $key1 Then
		...
	EndIf
EndFunc

While 1
	func1()
	func2()
	...
	funcn()
    Sleep(10)
WEnd

Func ToggleKey1()
	$Key1 = NOT $Key1
EndFunc

Func ToggleKey2()
	$Key2 = NOT $Key2
EndFunc

...

Func ToggleKeyn()
	$Keyn = NOT $Keyn
EndFunc

Func Terminate()
    Exit
EndFunc
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Ну, классно! :ok:
Хорошее решение, не понимаю чего тебе не хватает. :smile:
Вот можешь ещё тут почитать http://autoit-script.ru/index.php/topic,7565.0.html
 
Автор
M

Medved

Новичок
Сообщения
27
Репутация
0
Переписал свой скрипт, работает. Но большой скрипт так сделать будет тяжело, очень много нюансов получается 8)
 
Верх