Referenz - THREADDETACH
Syntax: THREADDETACH handle
Typ: Anweisung
Kategorie: Multithreading
Anmerkung:
Um diese Anweisung nutzen zu können, muss die Datei fbthread.bi in Ihren Quellcode eingebunden werden, z. B. mit INCLUDE.
THREADDETACH gibt die Ressourcen einer Prozedur frei, die durch THREADCREATE oder THREADCALL als eigener Thread gestartet wurde. Der Handle zu diesem Thread wird zerstört und kann nicht weiter genutzt werden.
'handle' ist ein Wert vom Typ ANY PTR, der von THREADCREATE bzw. THREADCALL zurückgegeben wurde.
Anders als THREADWAIT wartet THREADDETACH nicht auf die Beendigung des Threads. Die Ausführung des Threads wird unabhängig fortgesetzt. Alle zugewiesenen Ressourcen werden freigegeben, sobald der Thread beendet wird.
Um Speicherlecks zu vermeiden, besteht die sichere Möglichkeit zur Beendigung eines Threads darin, ihm zu signalisieren, dass er beendet werden muss, und dann mit THREADWAIT auf die Beendigung zu warten, es sei denn, THREADDETACH wurde zuvor aufgerufen.
Achtung: Da THREADDETACH den Thread-Handle zerstört, kann THREADWAIT nicht mehr auf das Ende des Threads warten. Die Verwendung von THREADWAIT kann dann u. U. das Programm zum Absturz bringen. THREADWAIT und THREADDETACH können daher nicht gemeinsam eingesetzt werden. Mutexe und CONDs können aber auch mit bereits freigegebenen Threads verwendet werden.
Beispiel:
#INCLUDE"fbthread.bi"
SUB mythread (BYVAL parameter AS ANY PTR)
PRINT "Hallo!"
END SUB
DIM AS ANY PTR thread = THREADCREATE(@mythread)
THREADDETACH thread
SLEEP 1
THREADDETACH THREADCREATE(@mythread)
SLEEP
Unterschiede zu QB: neu in FreeBASIC
Plattformbedingte Unterschiede:
- In der DOS-Version von FreeBASIC steht THREADDETACH nicht zur Verfügung, da Threads nicht unterstützt werden.
- Unter Linux starten Threads in der Reihenfolge, in der sie erstellt wurden. Dies kann unter Windows systembedingt nicht garantiert werden.
Unterschiede zu früheren Versionen von FreeBASIC: existiert seit FreeBASIC v1.00.0
Unterschiede unter den FB-Dialektformen:
In der Dialektform -lang qb steht THREADDETACH nicht zur Verfügung.
Siehe auch:
THREADCREATE, THREADCALL, THREADWAIT, Multithreading
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|