ThreadDetach

Releases a thread handle without waiting for the thread to finish

Syntax
	KeyPgDeclareDeclare KeyPgSubSub ThreadDetach ( KeyPgByvalByVal id KeyPgAsAs KeyPgAnyAny KeyPgPtrPtr )

Usage
	#include "fbthread.bi"
	ThreadDetach( id )

Parameters
	id
		KeyPgAnyAny KeyPgPtrPtr handle of a thread created by KeyPgThreadCreateThreadCreate or KeyPgThreadCallThreadCall

Description
	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.

Example
	#include "fbthread.bi"

	Sub mythread( ByVal param As Any Ptr )
	   Print "hi!"
	End Sub

	Dim As Any Ptr thread = ThreadCreate( @mythread )
	ThreadDetach( thread )
	'' or
	ThreadDetach( ThreadCreate( @mythread ) )

	Sleep

Dialect Differences
	* Threading is not allowed in the CompilerOptlang-lang qb dialect.

Platform Differences
	* ThreadDetach is not available with the DOS version of FreeBASIC, 
	  because multithreading is not supported by DOS kernel nor the used 
	  extender.

Differences from QB
	* New to FreeBASIC

See also
	* KeyPgThreadWaitThreadWait
	* KeyPgThreadCreateThreadCreate

