SDL CreateThread: Unterschied zwischen den Versionen
() |
Flash (Diskussion | Beiträge) (→Beschreibung) |
||
Zeile 18: | Zeile 18: | ||
== Beschreibung == | == Beschreibung == | ||
− | SDL_CreateThread erzeugt und führt einen neuen Thread aus, der als Parameter ''fn'' übergeben wird. Der neue Thread teilt sich mit mit dem Hauptthread gemeinsam den Speicherbereich. Dies kann zu scher nachvollziehbaren Fehlern führen, wenn zwei Threads gleichzeitig versuchen auf einen Speicherbereich zuzugreifen und in Speicherbereiche schreiben. Damit dies verhindert wird, sollte mit Hilfe von [[SDL_CreateMutex]] ein Mutex erzeugt werden mit dem sichergestellt werden kann, dass ein Thread exklusiv auf eine Ressource zugreift. | + | SDL_CreateThread erzeugt und führt einen neuen Thread aus, der als Parameter ''fn'' übergeben wird. Der neue Thread teilt sich mit mit dem Hauptthread gemeinsam den Speicherbereich. Dies kann zu scher nachvollziehbaren Fehlern führen, wenn zwei Threads gleichzeitig versuchen auf einen Speicherbereich zuzugreifen und in Speicherbereiche schreiben. Damit dies verhindert wird, sollte mit Hilfe von [[SDL_CreateMutex]] ein [http://de.wikipedia.org/wiki/Mutex Mutex] erzeugt werden mit dem sichergestellt werden kann, dass ein Thread exklusiv auf eine Ressource zugreift. |
Sobald die Funktion zu Ende verarbeitet wurde wird der Thread beendet. | Sobald die Funktion zu Ende verarbeitet wurde wird der Thread beendet. |
Version vom 15. August 2005, 17:48 Uhr
Inhaltsverzeichnis
SDL_CreateThread
Name
SDL_CreateThread - Erzeugt einen neuen Thread der Zugriff auf alle Speicherbereiche der Hauptanwendung hat.
Delphi-Spezifikation
function SDL_CreateThread(fn: PInt; data: Pointer): PSDL_Thread;
Parameter
fn | Erwartet einen Zeiger auf eine Funktion mit den Anweisungen, die der Thread ausführen soll. Diese Funktion sollte einen Integer als Rückgabewert liefern, damit beim verlassen des Threads ein Rückgabewert ausgelesen werden kann. |
---|---|
data | Ein Pointer dessen Inhalt als Parameter der aufgerufenen Funktion zur Verfügung gestellt wird. |
Beschreibung
SDL_CreateThread erzeugt und führt einen neuen Thread aus, der als Parameter fn übergeben wird. Der neue Thread teilt sich mit mit dem Hauptthread gemeinsam den Speicherbereich. Dies kann zu scher nachvollziehbaren Fehlern führen, wenn zwei Threads gleichzeitig versuchen auf einen Speicherbereich zuzugreifen und in Speicherbereiche schreiben. Damit dies verhindert wird, sollte mit Hilfe von SDL_CreateMutex ein Mutex erzeugt werden mit dem sichergestellt werden kann, dass ein Thread exklusiv auf eine Ressource zugreift.
Sobald die Funktion zu Ende verarbeitet wurde wird der Thread beendet.
Hinweise
In der Version 1.2.7 von SDL gibt es einen Fehler. Selbst dann wenn der Thread erfolgreich beendet wird, bleiben immer noch einige Ressourcen im Speicher bestehen. Um diese Ressourcen ebenfalls freizugeben, sollte SDL_WaitThread aufgerufen werden. Geschieht dies nicht wird SDL_CreateThread nach mehr als 1010 erfolgreich erzeugten Threads hängen bleiben.
Zugehörige Wertrückgaben
Die Funktion liefert bei Erfolg einen PSDL_Thread zurück über den man den Thread später ansteuern kann. Verlief die Erzeugung nicht erfolgreich entspricht der Rückgabewert NIL.
Beispiel
uses SDL; var thread: PSDL_Thread; returnValue: Integer; function thread_func(): Integer; begin // do threading here WriteLn('Start Thread'); SDL_Delay(5000); WriteLn('End Thread'); result := 1; // thread leaves and return this value end; begin returnValue := 0; thread := SDL_CreateThread(@thread_func, NIL); SDL_WaitThread(thread, returnValue); WriteLn('Thread returns code ',returnValue); SDL_Quit; WriteLn('ByeBye ;)'); end.