{{fbdoc item="title" value="THREADDETACH"}}----
Releases a thread handle without waiting for the thread to finish

{{fbdoc item="syntax"}}##
	[[KeyPgDeclare|Declare]] [[KeyPgSub|Sub]] **""ThreadDetach""** ( [[KeyPgByval|Byval]] //id// [[KeyPgAs|As]] [[KeyPgAny|Any]] [[KeyPgPtr|Ptr]] )
##
{{fbdoc item="usage"}}##
	#include "fbthread.bi"
	**""ThreadDetach""**( //id// )
##
{{fbdoc item="param"}}
	##//id//##
		##[[KeyPgAny|Any]] [[KeyPgPtr|Ptr]]## handle of a thread created by ##[[KeyPgThreadCreate|ThreadCreate]]## or ##[[KeyPgThreadCall|ThreadCall]]##

{{fbdoc item="desc"}}
	**""ThreadDetach""** releases resources associated with the thread handle returned by ##[[KeyPgThreadCreate|ThreadCreate]]## or ##[[KeyPgThreadCall|ThreadCall]]##. The thread handle will be destroyed by **""ThreadDetach""** and cannot be used anymore.
	Unlike ##[[KeyPgThreadWait|ThreadWait]]##, **""ThreadDetach""** does not wait for the thread to finish and thread execution continues independently. Any allocated resources will be freed once the thread exits.
	
	In order to avoid memory leaks, the safe way to end a thread is to always signal to it that it must end, and then call ##[[KeyPgThreadWait|ThreadWait]]## on that thread except if **""ThreadDetach""** has previously been called.
	
	**Note:** As **""ThreadDetach""** destroys the thread handle, ##[[KeyPgThreadWait|ThreadWait]]## can no longer check for the thread ending, and even the use of ##[[KeyPgThreadWait|ThreadWait]]## becomes unpredictable (may crash the program). The use between ##[[KeyPgThreadWait|ThreadWait]]## and **""ThreadDetach""** must be exclusive.
	But mutexes and conditional variables can also be used with detached threads.

{{fbdoc item="ex"}}
	{{fbdoc item="filename" value="examples/manual/threads/threadsdetach.bas"}}%%(freebasic)
#include "fbthread.bi"

sub mythread( byval param as any ptr )
	print "hi!"
end sub

var thread = threadcreate( @mythread )
threaddetach( thread )

threaddetach( threadcreate( @mythread ) )

sleep
%%

{{fbdoc item="lang"}}
	- Threading is not allowed in the //[[CompilerOptlang|-lang qb]]// dialect.

{{fbdoc item="target"}}
	- **""ThreadDetach""** is not available with the DOS version of ""FreeBASIC"", because multithreading is not supported by DOS kernel nor the used extender.

{{fbdoc item="diff"}}
	- New to ""FreeBASIC""

{{fbdoc item="see"}}
	- ##[[KeyPgThreadWait|ThreadWait]]##
	- ##[[KeyPgThreadCreate|ThreadCreate]]##

{{fbdoc item="back" value="CatPgThreading|Threading Support Functions"}}