SDL CreateThread: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Zweideutigkeiten vermeiden ("Welche Funktion wurde gemeint?"))
K (Siehe auch)
Zeile 59: Zeile 59:
 
[[SDL_WaitThread]], [[SDL_KillThread]]
 
[[SDL_WaitThread]], [[SDL_KillThread]]
  
[[Kategorie:SDL|SDL_CreateThread]]
+
[[Kategorie:SDL|CreateThread]]

Version vom 16. August 2005, 11:33 Uhr

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 fn abgearbeitet wurde, beendet sich der Thread.

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

SDL_CreateThread 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.

Beispiel als Download

Siehe auch

SDL_WaitThread, SDL_KillThread