SDL CreateThread: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
()
 
K (Der Ausdruck ''<pascal>(.*?)</pascal>'' wurde ersetzt mit ''<source lang="pascal">$1</source>''.)
 
(9 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 3: Zeile 3:
 
== Name ==
 
== Name ==
 
'''SDL_CreateThread''' - Erzeugt einen neuen Thread der Zugriff auf alle Speicherbereiche der Hauptanwendung hat.
 
'''SDL_CreateThread''' - Erzeugt einen neuen Thread der Zugriff auf alle Speicherbereiche der Hauptanwendung hat.
 +
 +
 +
  
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
 
  function '''SDL_CreateThread'''(''fn'': PInt; ''data'': Pointer): PSDL_Thread;
 
  function '''SDL_CreateThread'''(''fn'': PInt; ''data'': Pointer): PSDL_Thread;
 +
 +
 +
  
 
== Parameter ==
 
== Parameter ==
Zeile 16: Zeile 22:
 
| Ein Pointer dessen Inhalt als Parameter der aufgerufenen Funktion zur Verfügung gestellt wird.
 
| Ein Pointer dessen Inhalt als Parameter der aufgerufenen Funktion zur Verfügung gestellt wird.
 
|}
 
|}
 +
 +
 +
  
 
== 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 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 [http://de.wikipedia.org/wiki/Mutex Mutex] oder mit Hilfe von [[SDL_CreateSemaphore]] eine [http://de.wikipedia.org/wiki/Semaphor_(Informatik) Semaphor] erzeugen werden, mit dem sichergestellt werden kann, dass ein Thread exklusiv auf eine Ressource zugreift.
 +
 
 +
Sobald ''fn'' abgearbeitet wurde, beendet sich der Thread.
 +
 
 +
 
  
Sobald die Funktion zu Ende verarbeitet wurde wird der Thread beendet.
 
  
 
== Hinweise ==
 
== 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.
+
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'''.
 +
 
 +
 
  
==  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 ==
 
== Beispiel ==
<pascal>uses SDL;
+
<source lang="pascal">uses SDL;
  
 
var
 
var
Zeile 53: Zeile 71:
 
   SDL_Quit;
 
   SDL_Quit;
 
   WriteLn('ByeBye ;)');
 
   WriteLn('ByeBye ;)');
end.</pascal>
+
end.</source>
 
[http://www.delphigl.com/download/sdl/sample_sdl_thread.zip Beispiel als Download]
 
[http://www.delphigl.com/download/sdl/sample_sdl_thread.zip Beispiel als Download]
 +
 +
 +
  
 
== Siehe auch ==
 
== Siehe auch ==
 
[[SDL_WaitThread]], [[SDL_KillThread]]
 
[[SDL_WaitThread]], [[SDL_KillThread]]
  
[[Kategorie:SDL|SDL_CreateThread]]
+
[[Kategorie:SDL|CreateThread]]

Aktuelle Version vom 10. März 2009, 19:08 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 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