<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Потоки]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=5058&amp;type=atom" />
	<updated>2016-12-02T20:56:49Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=5058</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Потоки]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=109555#p109555" />
			<content type="html"><![CDATA[<p>Где можно скачать com.ahk? Нужна поддержка COM_Invoke.</p>]]></content>
			<author>
				<name><![CDATA[OmTatSat]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33453</uri>
			</author>
			<updated>2016-12-02T20:56:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=109555#p109555</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Потоки]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=40698#p40698" />
			<content type="html"><![CDATA[<p>Пожалуйста: <a href="http://www.autohotkey.net/~ayosh/MultiThreading.zip">архив со всеми файлами</a><br />Файлы по отдельности: <a href="http://www.autohotkey.net/~ayosh/AhkDllObject.ahk">AhkDllObject.ahk</a> <a href="http://www.autohotkey.net/~ayosh/AutoHotkey.dll">AutoHotkey.dll</a> <a href="http://www.autohotkey.net/~ayosh/AutoHotkey.exe">AutoHotkey.exe</a> <a href="http://www.autohotkey.net/~ayosh/COM.ahk">COM.ahk</a> <a href="http://www.autohotkey.net/~ayosh/MultiThreading_test.ahk">MultiThreading_test.ahk</a></p><p>Запуск: AutoHotkey.exe MultiThreading_test.ahk</p>]]></content>
			<author>
				<name><![CDATA[ayosh]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25030</uri>
			</author>
			<updated>2010-10-21T21:39:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=40698#p40698</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Потоки]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=40689#p40689" />
			<content type="html"><![CDATA[<p>Было бы неплохо. А то у меня все ошибками разными плюется</p>]]></content>
			<author>
				<name><![CDATA[VOLK666]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25998</uri>
			</author>
			<updated>2010-10-21T16:45:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=40689#p40689</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Потоки]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=40659#p40659" />
			<content type="html"><![CDATA[<p>И всё таки она появилась, с библиотекой Autohotkey.dll и данной сборкой Autohotkey, основа которого AHK_L:&nbsp; <a href="http://www.autohotkey.net/~HotKeyIt/AutoHotkey/">Autohotkey.dll</a><br />Проверил как работает с COM. Испытывал то, что выложил VOLK666, так что можно делать свой download manager с неглючным gui, tray и т.д. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>Для запуска скрипта нам необходимы: <br />1. файлы из архива <a href="http://www.autohotkey.net/~HotKeyIt/AutoHotkey.zip">Autohotkey.zip</a> (<a href="http://www.autohotkey.net/~HotKeyIt/AutoHotkey/">описание и оттуда же архив</a>) - из корня архива AhkDllObject.ahk для создания из DLL объекта, AutoHotkey.dll и AutoHotkey.exe взяты из папки \Win32a\<br />2. COM.ahk для теста COM взят отсюда <a href="http://www.autohotkey.net/~Sean/Lib/COM.zip">COM.zip</a> (<a href="http://www.autohotkey.com/forum/viewtopic.php?t=22923">Тема на форуме</a>)<br />Скрипт VOLK666&#039;а просто скопипастил чтобы не морочиться и добавил циферки на выходной файл <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>Также скрипт лучше сохранить в UTF-8 без BOM. Версии exe\dll не Unicode, так что в gui на англ написал. Если будет желание, могу собрать все файлы в архив и выложить рабочий вариант <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><div class="codebox"><pre><code>#Include AhkDllObject.ahk
#NoEnv
SetBatchLines, -1

;~ Переменные со скриптами для теста COM
gosub, s

;~ Количество потоков
Threads = 10 
;~ Загружаем библиотеку...
Gosub, LauchThreads

;~ Запускаем тестовые потоки
Loop % Threads
    dll%A_Index%.ahktextdll(&quot;#NoTrayIcon`nSetBatchLines,-1`nLoop 10`n{`nx++`nSleep 1000`n}&quot;)


;~ нам надо окно )
wh := 13*Threads
gui +alwaysontop
gui, add, text, vr w200 h%wh%
gui, add, button, gGuiClose vbtn y20 hidden, Exit
gui, show, ,Threads test

;~ Ожидаем пока все потоки завершатся, параллельно выдёргиваем переменные, обновляем окно
While ThreadsReady(Threads) != 0
{   statestr :=
    Loop % Threads  
        statestr .= (dll%A_Index%.ahkgetvar(&quot;x&quot;) ? &quot;Thread &quot; A_Index &quot;; x = &quot; dll%A_Index%.ahkgetvar(&quot;x&quot;) : &quot;no var&quot;) &quot;`n&quot;
    GuiControl,, r, % statestr
    Sleep 250
}


;~ Тест с COM объектами, запускаем потоки со скриптами COM
Loop 3
    dll%A_Index%.ahktextdll(script%a_index%)

;~ ждём, обновляем..
While ThreadsReady(3) != 0
{   
    statestr :=
    Loop 3
        statestr .=  (dll%A_Index%.ahkReady() ? &quot;COM thread running&quot; : &quot;COM thread closed&quot;) &quot;`n&quot;
    GuiControl,, r, % statestr
    Sleep 250
}
GuiControl,, r, COM threads finished
GuiControl, show, btn
;~ проверяем наличие скаченных файлов )
Run % A_ScriptDir
Return

ThreadsReady(Threads) {
    Loop % Threads
        sum += dll%A_Index%.ahkReady()
    Return sum
}

GuiClose:
ExitApp
Return

LauchThreads:
Loop % Threads
{
;~  ...под разными именами
    FileMove, % ahkdll := A_Index = 1 ? &quot;AutoHotkey.dll&quot; : &quot;AutoHotkey&quot; A_Index-1 &quot;.dll&quot;, AutoHotkey%A_Index%.dll
    dll%A_Index%:=AhkdllObject(&quot;AutoHotkey&quot; A_Index &quot;.dll&quot;)
}
FileMove, AutoHotkey%Threads%.dll, AutoHotkey.dll
Return

s:
script1 =
(
#Include COM.ahk
sURL :=   &quot;http://www.autohotkey.com/download/AutoHotkeyInstall.exe&quot;
sFile:=   A_WorkingDir &quot;\AutoHotkeyInstall1.exe&quot;
bOverWrite := True 

COM_Init() 
pwhr :=   COM_CreateObject(&quot;WinHttp.WinHttpRequest.5.1&quot;) 
COM_Invoke(pwhr, &quot;Open&quot;, &quot;GET&quot;, sURL) 
COM_Invoke(pwhr, &quot;Send&quot;) 

If   psfa :=   COM_Invoke(pwhr, &quot;ResponseBody&quot;) 
{ 
pstm :=   COM_CreateObject(&quot;ADODB.Stream&quot;) 
COM_Invoke(pstm, &quot;Type&quot;, 1)   ; adTypeBinary:=1, adTypeText:=2 
COM_Invoke(pstm, &quot;Open&quot;) 
COM_Invoke_(pstm, &quot;Write&quot;, 0x2011, psfa) ; VT_ARRAY | VT_UI1 
COM_Invoke(pstm, &quot;SaveToFile&quot;, sFile, bOverWrite ? 2:1) 
COM_Invoke(pstm, &quot;Close&quot;) 
COM_Release(pstm) 
COM_SafeArrayDestroy(psfa) 
} 

COM_Release(pwhr)  
COM_Term()
)
script2 =
(
#Include COM.ahk
sURL :=   &quot;http://www.autohotkey.com/download/AutoHotkeyInstall.exe&quot;
sFile:=   A_WorkingDir &quot;\AutoHotkeyInstall2.exe&quot;
bOverWrite := True 

COM_Init() 
pwhr :=   COM_CreateObject(&quot;WinHttp.WinHttpRequest.5.1&quot;) 
COM_Invoke(pwhr, &quot;Open&quot;, &quot;GET&quot;, sURL) 
COM_Invoke(pwhr, &quot;Send&quot;) 

If   psfa :=   COM_Invoke(pwhr, &quot;ResponseBody&quot;) 
{ 
pstm :=   COM_CreateObject(&quot;ADODB.Stream&quot;) 
COM_Invoke(pstm, &quot;Type&quot;, 1)   ; adTypeBinary:=1, adTypeText:=2 
COM_Invoke(pstm, &quot;Open&quot;) 
COM_Invoke_(pstm, &quot;Write&quot;, 0x2011, psfa) ; VT_ARRAY | VT_UI1 
COM_Invoke(pstm, &quot;SaveToFile&quot;, sFile, bOverWrite ? 2:1) 
COM_Invoke(pstm, &quot;Close&quot;) 
COM_Release(pstm) 
COM_SafeArrayDestroy(psfa) 
} 

COM_Release(pwhr)  
COM_Term()
)
script3 =
(
#Include COM.ahk
sURL :=   &quot;http://www.autohotkey.com/download/AutoHotkeyInstall.exe&quot;
sFile:=   A_WorkingDir &quot;\AutoHotkeyInstall3.exe&quot;
bOverWrite := True 

COM_Init() 
pwhr :=   COM_CreateObject(&quot;WinHttp.WinHttpRequest.5.1&quot;) 
COM_Invoke(pwhr, &quot;Open&quot;, &quot;GET&quot;, sURL) 
COM_Invoke(pwhr, &quot;Send&quot;) 

If   psfa :=   COM_Invoke(pwhr, &quot;ResponseBody&quot;) 
{ 
pstm :=   COM_CreateObject(&quot;ADODB.Stream&quot;) 
COM_Invoke(pstm, &quot;Type&quot;, 1)   ; adTypeBinary:=1, adTypeText:=2 
COM_Invoke(pstm, &quot;Open&quot;) 
COM_Invoke_(pstm, &quot;Write&quot;, 0x2011, psfa) ; VT_ARRAY | VT_UI1 
COM_Invoke(pstm, &quot;SaveToFile&quot;, sFile, bOverWrite ? 2:1) 
COM_Invoke(pstm, &quot;Close&quot;) 
COM_Release(pstm) 
COM_SafeArrayDestroy(psfa) 
} 

COM_Release(pwhr)  
COM_Term()
)
Return</code></pre></div>]]></content>
			<author>
				<name><![CDATA[ayosh]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25030</uri>
			</author>
			<updated>2010-10-20T21:18:07Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=40659#p40659</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Потоки]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=40636#p40636" />
			<content type="html"><![CDATA[<p>Ну, конкретно httpQuery для меня тёмный лес, никогда не ковырялся в этом. Могу только повторить то, что знаю — реальный поток у скрипта один.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2010-10-20T16:11:21Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=40636#p40636</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Потоки]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=40634#p40634" />
			<content type="html"><![CDATA[<p>При использовании COM-функции<br /></p><div class="codebox"><pre><code>sURL :=   &quot;http://www.autohotkey.com/download/AutoHotkeyInstall.exe&quot;
sFile:=   A_WorkingDir &quot;\AutoHotkeyInstall.exe&quot;
bOverWrite := True 

COM_Init() 
pwhr :=   COM_CreateObject(&quot;WinHttp.WinHttpRequest.5.1&quot;) 
COM_Invoke(pwhr, &quot;Open&quot;, &quot;GET&quot;, sURL) 
COM_Invoke(pwhr, &quot;Send&quot;) 

If   psfa :=   COM_Invoke(pwhr, &quot;ResponseBody&quot;) 
{ 
pstm :=   COM_CreateObject(&quot;ADODB.Stream&quot;) 
COM_Invoke(pstm, &quot;Type&quot;, 1)   ; adTypeBinary:=1, adTypeText:=2 
COM_Invoke(pstm, &quot;Open&quot;) 
COM_Invoke_(pstm, &quot;Write&quot;, 0x2011, psfa) ; VT_ARRAY | VT_UI1 
COM_Invoke(pstm, &quot;SaveToFile&quot;, sFile, bOverWrite ? 2:1) 
COM_Invoke(pstm, &quot;Close&quot;) 
COM_Release(pstm) 
COM_SafeArrayDestroy(psfa) 
} 

COM_Release(pwhr)  
COM_Term()</code></pre></div><p>Трей и GUI скрипта отвечают очень долго. Используя функцию URLDownloadToFile такого уже нет. Но она привязана к IE</p><p><strong>YMP</strong>, то-есть вообще на AHK нереально отправлять скажем запросы через функцию httpQuery в несколько потоков?</p>]]></content>
			<author>
				<name><![CDATA[VOLK666]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25998</uri>
			</author>
			<updated>2010-10-20T15:44:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=40634#p40634</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Потоки]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=40594#p40594" />
			<content type="html"><![CDATA[<p>Если это winwait, то лучше делать отдельным скриптом. Если обычный таймер, то проблем быть не должно.</p>]]></content>
			<author>
				<name><![CDATA[InFlames]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24849</uri>
			</author>
			<updated>2010-10-19T17:38:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=40594#p40594</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Потоки]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=40590#p40590" />
			<content type="html"><![CDATA[<p>А что конкретно имеется в виду? Вообще, реально, скрипт выполняется в одном потоке. Потоки, о которых говорится в справке, это хитрость такая, позволяющая до некоторой степени имитировать многопоточность.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2010-10-19T16:49:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=40590#p40590</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Потоки]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=40566#p40566" />
			<content type="html"><![CDATA[<p>GUI скрипта виснет, когда выполняется какое-то другое действие. Можно ли сделать так, чтобы и GUI нормально отвечал на запросы, когда выполняется другое действие?</p>]]></content>
			<author>
				<name><![CDATA[VOLK666]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25998</uri>
			</author>
			<updated>2010-10-19T06:47:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=40566#p40566</id>
		</entry>
</feed>
