Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - THREADCALL

Referenz-Navigation

 

Syntax: THREADCALL Prozedurname [(Parameterliste)]
Typ: Funktion
Kategorie: Multithreading

THREADCALL startet eine Prozedur Ihres Programms als eigenständigen Thread.

THREADCALL arbeitet ähnlich wie BefehlsreferenzeintragTHREADCREATE. Wird eine Prozedur mit THREADCALL aufgerufen, so wird sie in einem neuen Thread gestartet und gleichzeitig mit dem Code ausgeführt, von dem sie aufgerufen wurde. Das Betriebssystem erreicht diese Gleichzeitigkeit, indem es die Prozedur einem anderen Prozessor zuweist, sofern einer vorhanden ist, oder indem es die Wartezeiten des Hauptprogramms ausnutzt.

Bevor Sie Ihr Programm beenden, müssen Sie mit BefehlsreferenzeintragTHREADWAIT auf die Beendigung aller Threads warten, die von ihm gestartet wurden.

Um mehrere Threads zu synchronisieren, existieren verschiedene Möglichkeiten; sie können entweder über Mutexe aufeinander abgestimmt werden oder auf ein COND-Signal warten. Siehe dazu BefehlsreferenzeintragMUTEXCREATE sowie BefehlsreferenzeintragCONDCREATE.

THREADCALL ist eine einfachere Methode, Threads zu erstellen, und erlaubt die Übergabe von Daten, ohne dass dabei auf Befehlsreferenzeintragglobale Variablen oder BefehlsreferenzeintragPointer zurückgegriffen werden muss. Trotzdem ist die Funktion BefehlsreferenzeintragTHREADCREATE effizienter und sollte in Programmen verwendet werden, die eine große Zahl an Threads erstellen.
Unter Linux wird die Bibliothek Externer Link!libffi (bzw. das zugehörige devel-Paket) benötigt, um die Funktion verwenden zu können, unter Windows wird die statische Version der Bibliothek mitgeliefert. Da es sich bei libffi um eine externe Bibliothek handelt, sollte die Externer Link!Lizenz beachtet werden.

Obwohl die meisten Prozeduren unterstützt werden, können folgende Prozeduren nicht mit THREADCALL gestartet werden:

Beispiel:

Sub thread(id As String, tlock As Any Ptr, anzahl as Integer = 5)
  For i As Integer = 1 To anzahl
    MutexLock tlock
    Print "Schleife "; id; " befindet sich im Durchlauf Nr. "; i
    MutexUnlock tlock
    Sleep 1
  Next
End Sub

Dim tlock As Any Ptr = MutexCreate()
Dim a As Any Ptr = ThreadCall thread("A", tlock)
Dim b As Any Ptr = ThreadCall thread("B", tlock, 7)
ThreadWait a
ThreadWait b
MutexDestroy tlock
Print "Fertig (und das ohne die Verwendung von DIM SHARED!)"
Sleep

Mögliche Ausgabe:

Schleife B befindet sich im Durchlauf Nr.  1
Schleife A befindet sich im Durchlauf Nr.  1
Schleife B befindet sich im Durchlauf Nr.  2
Schleife A befindet sich im Durchlauf Nr.  2
Schleife B befindet sich im Durchlauf Nr.  3
Schleife A befindet sich im Durchlauf Nr.  3
Schleife B befindet sich im Durchlauf Nr.  4
Schleife A befindet sich im Durchlauf Nr.  4
Schleife B befindet sich im Durchlauf Nr.  5
Schleife A befindet sich im Durchlauf Nr.  5
Schleife B befindet sich im Durchlauf Nr.  6
Schleife B befindet sich im Durchlauf Nr.  7
Fertig (und das ohne die Verwendung von DIM SHARED!)

Unterschiede zu QB: neu in FreeBASIC

Plattformbedingte Unterschiede:

Unterschiede zu früheren Versionen von FreeBASIC: existiert seit FreeBASIC v0.24

Unterschiede unter den FB-Dialektformen:
In der Dialektform Befehlsreferenzeintrag-lang qb steht THREADCALL nicht zur Verfügung.

Siehe auch:
BefehlsreferenzeintragTHREADCREATE, BefehlsreferenzeintragTHREADWAIT, BefehlsreferenzeintragMultithreading


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 05.01.2012 von Redakteurnemored angelegt.
  • Die aktuellste Version wurde am 28.02.2014 von AdministratorSebastian gespeichert.
  Versionen Versionen