Starts a user-defined procedure in a separate execution thread
Syntax
Usage
result = ThreadCreate ( proc [, [ param ] [, stack_size ] ] )
Parameters
proc
A pointer to the
Sub intended to work as a thread.
param
Optional
Any Ptr argument for the
Sub pointed to by
proc (it can be a pointer to a structure or an array if more arguments are needed).
stack_size
Optional number of bytes to reserve for this thread's stack.
Return Value
Threadcreate returns an
Any Ptr handle to the thread created, or the null pointer (0) on failure.
Description
The user function is started as a thread executes in parallel with the main part of the program. The OS achieves this by assigning it to a different processor if it exists, or using the waiting times in the main program.
Before closing, a program must wait for the termination of all the threads it has launched; see
ThreadWait.
To avoid simultaneous access to shared resources from different threads, FreeBASIC implements mutexes, mutual exclusion locks that can be "owned" by a single thread when doing critical work. See
MutexCreate,
MutexLock,
MutexUnlock,
MutexDestroy.
On some systems, the stack automatically grows beyond
stack_size if more space is needed; on others, this is the fixed maximum allowed. Behavior is undefined when more stack is used than the reserved size on systems where stacks are not able to grow.
Example
Dim Shared terminate As Integer = 0
Sub mythread (param As Any Ptr)
Dim As Double t = Timer
While( 1 )
Print "*";
'' pause for .1 second
While( Abs( Timer - t ) < .1 )
Sleep 1, 1
Wend
t = Timer
If terminate=1 Then Exit Sub
Wend
End Sub
Dim thread As Any Ptr
Dim b As Integer
Dim As Double t
Print "Main program prints dots"
Print "Thread prints asterisks"
thread = ThreadCreate( @mythread, 0 )
Print "Thread launched";
While b < 30
Print ".";
'' pause for .1 second
While( Abs( Timer - t ) < .1 )
Sleep 1, 1
Wend
t = Timer
b += 1
Wend
terminate=1
Print "Terminate launched";
ThreadWait (thread)
Print "Thread terminated"
Sleep
Dialect Differences
- Threading is not allowed in -lang qb
Platform Differences
- Threadcreate is not available with the DOS version / target of FreeBASIC, because multithreading is not supported by DOS kernel nor the used extender.
- In Linux the threads are always started in the order they are created, this can't be assumed in Win32. It's an OS, not a FreeBASIC issue.
Differences from QB
See also