CreateThread()

Syntax

Thread = CreateThread(@ProcedureName(), *Wert)
Beschreibung
Erstellt einen neuen Thread, welcher im Hintergrund der Applikation läuft. Wenn der Thread korrekt erstellt wurde, wird die 'Thread' Nummer zurückgegeben, welche zusammen mit den anderen Befehlen, wie KillThread(), PauseThread(), etc..., benutzt wird. Die Prozedur, welche Sie als ein Thread verwenden, muss einen Parameter haben und kann nichts zurückgeben. Das '*Wert' Argument von CreateThread() wird als Parameter an die Prozedur übergeben. Wenn Sie versuchen, von Ihrem Thread aus einen Wert zurückzugeben, wird dieser einfach verloren gehen.

Parameter

@ProcedureName() Die Adresse der Prozedur, welche Sie als Code für den neuen Thread benutzen möchten. Denken Sie daran, dem Prozedurennamen das @ voranzustellen und an die Klammern dahinter, damit die Adresse der Prozedur übergeben wird.
*Wert Der als Parameter an die Thread-Prozedur übergebene Wert. Es liegt an Ihnen, wofür dieser Wert verwendet wird.

Rückgabewert

Die Nummer des neu erstellten Threads - oder Null, wenn der neue Thread nicht erstellt werden konnte. Diese Nummer wird benötigt, wenn Sie den Thread mit den anderen Befehlen dieser Library kontrollieren möchten.

Beispiel

Das nachfolgende Beispiel zeigt den grundlegenden Weg zur Erstellung eines Threads, wenn er auch in diesem Fall nichts weiter tut.

  Procedure DeineProzedur(*Wert)
    ; Die Variable '*Wert' wird 23 enthalten
  EndProcedure

  CreateThread(@DeineProzedur(), 23)

Beispiel: Übergeben mehrerer Parameter an einen Thread

  Structure Person
    Name$
    Age.b
    Phone.l
  EndStructure
  
  Procedure Thread(*Parameters.Person)
    
    ; Zeigt die Parameter an
    ;
    Debug *Parameters\Name$
    Debug *Parameters\Age
    Debug *Parameters\Phone
    
    ; Sobald wir sie nicht mehr benötigen, verwenden wir ClearStructure(), um sicher zu gehen,
    ; dass alle dynamischen Objekte (wenn vorhanden) korrekt gelöscht werden, und geben
    ; den dynamischen Speicherbereich frei
    ClearStructure(*Parameters, Person)
    FreeMemory(*Parameters)
    
  EndProcedure
  
  ; Wir verwenden einen dynamisch zugewiesenen Speicherbereich, was auch beim Aufrufen von einer Prozedur aus noch funktioniert.
  ; Der Speicherbereich wird durch den Thread freigegeben.
  ;
  *Parameters.Person = AllocateMemory(SizeOf(Person))
  *Parameters\Name$ = "John"
  *Parameters\Age   = 30
  *Parameters\Phone = 10203040
  
  CreateThread(@Thread(), *Parameters) ; Einen Zeiger auf unsere Struktur an den Thread senden

  Delay(2000)

Unterstützte OS

Alle

<- CreateSemaphore() - Thread Inhaltsverzeichnis - FreeMutex() ->