SDL CreateThread

Aus DGL Wiki
Version vom 10. März 2009, 19:08 Uhr von DGLBot (Diskussion | Beiträge) (Der Ausdruck ''<pascal>(.*?)</pascal>'' wurde ersetzt mit ''<source lang="pascal">$1</source>''.)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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 schwer 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 oder mit Hilfe von SDL_CreateSemaphore eine Semaphor erzeugen 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.



Rückgabewert

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