[lib] 新建线程 CreateThread()

许多实用脚本和封装函数, 可以让您编写脚本更加便捷高效

Moderators: tmplinshi, arcticir

arcticir
Posts: 694
Joined: 17 Nov 2013, 11:32

[lib] 新建线程 CreateThread()

30 Sep 2014, 09:27

除了热键、定时器,监听函数这些自动新建线程的命令
AHK没有新建线程的命令,这个函数解决这个问题。

Code: Select all

#Persistent
CreateThread("A",5)
MsgBox,测试
A(a){
MsgBox % a
}
与普通的新线程不同,这个函数新建的线程具有强制性。
例如弹出菜单时,连热键都会失效。

Code: Select all

#Persistent

CreateThread("A",5)
Menu, Test, Add,Test1,Test
Menu, Test, Add,Test2,Test
Menu, Test, Show
Test:
return

A(a){
Loop 
{
ToolTip,% A_Index
Sleep, 200
}
}

Code: Select all

CreateThread(f,b*){
	static Type:=(A_PtrSize=8) ? "Ptr":"UInt", h:=[]
	if (n:=A_EventInfo) and (f:=h[n])
	{
		s:= h[n "_"],s.func.(f*)
		DllCall("TerminateThread", Type, s.ID, Type, 0)
		DllCall("CloseHandle", Type, s.ID)
		DllCall("GlobalFree", Type,s.RC)
		h.Remove(n "_"),h.Remove(n,"")
	}
	else if d:=IsFunc(f) 
	{
		h[n:=&b]:=b,s:=h[n "_"]:={func:f}
		s.RC:=RegisterCallback("CreateThread","F",1,n)
		s.ID:=DllCall( "CreateThread", Type,0, Type,0, Type,s.RC, Type,0, Type,0, Type,0)
	}
}
User avatar
RobertL
Posts: 546
Joined: 18 Jan 2014, 01:14
Location: China

Re: [lib] 新建线程 CreateThread()

30 Sep 2014, 10:08

厉害呢..好像是原创..
还是不太理解他的优点,包括他的特点线程具有强制性(类似被Critical标记的线程?)
我为人人,人人为己?
arcticir
Posts: 694
Joined: 17 Nov 2013, 11:32

Re: [lib] 新建线程 CreateThread()

30 Sep 2014, 10:14

强制性嘛,弹出菜单时,其他线程都会挂起,但这个线程会继续执行。
应该不是Critical,但有着类似的功能和原理,或者说比Critical更具优先性。
可以在一些会停滞其他线程的命令,如UrlDownloadToFile执行时维持多线程。
Last edited by arcticir on 30 Sep 2014, 10:19, edited 1 time in total.
User avatar
RobertL
Posts: 546
Joined: 18 Jan 2014, 01:14
Location: China

Re: [lib] 新建线程 CreateThread()

30 Sep 2014, 10:17

哦,那就是Critical了,防止当前线程被其他线程中断
然后就是新方法建立新线程,看着还算可靠..
我为人人,人人为己?
vasili111
Posts: 747
Joined: 21 Jan 2014, 02:04
Location: Georgia

Re: [lib] 新建线程 CreateThread()

15 Oct 2014, 12:32

Sorry that I am using English in Chinese section. I did not find English thread for that script.
What means second parameter of CreateThread() function? I mean 5 here CreateThread("A",5) .
DRAKON-AutoHotkey: Visual programming for AutoHotkey.
User avatar
RobertL
Posts: 546
Joined: 18 Jan 2014, 01:14
Location: China

Re: vasili111

16 Oct 2014, 03:10

Parameters to pass to function "A" A(a).
CreateThread(f,b*) - CreateThread(funtionName_InvokedByNewThread,parametersForIt*)
我为人人,人人为己?

Return to “脚本函数”

Who is online

Users browsing this forum: No registered users and 8 guests