Thread-Objekte definieren

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Thread-Objekte definieren - Index

In den meisten Anwendungen wird ein Ausführungs-Thread durch ein Thread-Objekt repräsentiert. Solche Objekte vereinfachen die Entwicklung von Multithread-Anwendungen, indem sie die gängigsten Einsatzmöglichkeiten von Threads kapseln.

Anmerkung: Thread-Objekte bieten keine Kontrolle über die Sicherheitsattribute oder die Stack-Größe der Threads. Um auf diese Faktoren Einfluss zu nehmen, verwenden Sie die Funktion BeginThread. Einige der unter Threads koordinieren beschriebenen Objekte und Methoden zur Thread-Synchronisierung können zusammen mit BeginThread eingesetzt werden.

So verwenden Sie ein Thread-Objekt in Ihrer Anwendung (und einen Nachkommen von Classes.TThread erzeugen):

  1. Wählen Sie im Hauptmenü einen der Befehle:
    • Datei > Neu > Weitere > Delphi-Projekte > Delphi-Dateien > Thread-Objekt
    • Datei > Neu > Weitere > C++-Projekte > C++-Dateien > Thread-Objekt
  1. Im Dialogfeld Neues Thread-Objekt geben Sie einen Klassennamen ein, wie beispielweise TMyThread.
  2. Um den neuen Thread zu benennen, markieren Sie das Kontrollfeld Benannter Thread und geben einen Thread-Namen ein (nur VCL-Anwendungen).
  3. Klicken Sie auf OK. Im Quelltext-Editor wird eine neue Unit-Datei erstellt, um den Thread zu implementieren.

Nähere Informationen zur Benennung von Threads finden Sie unter Einen Thread benennen.

Anmerkung: Im Gegensatz zu den meisten Dialogfeldern der IDE, in denen die Eingabe eines Klassennamens erforderlich ist, wird im Dialogfeld Neues Thread-Objekt dem eingegebenen Klassennamen nicht automatisch der Buchstabe T vorangestellt.

Ausgabe

Die automatisch generierte Unit-Datei, die im Quelltext-Editor geöffnet wird, enthält das Quelltextgerüst für die neue Thread-Klasse. Für einen Thread mit dem Namen TMyThread sieht die Datei beispielsweise folgendermaßen aus:

unit Unit1;
interface
uses
  Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF};
type
  TMyTheadClass = class(TThread)
  protected
    procedure Execute; override;
  end;
implementation
 { 
 Wichtig: Methoden und Eigenschaften von Objekten in visuellen Komponenten können nur 
 in Methoden verwendet werden, die mit Synchronize aufgerufen wurden, z.B.:
     Synchronize(UpdateCaption);  
 und UpdateCaption könnte folgendermaßen aussehen:
   procedure TMyTheadClass.UpdateCaption;
   begin
     Form1.Caption := 'Updated in a thread';
   end; 
   
   oder 
   
   Synchronize( 
     procedure 
     begin
       Form1.Caption := 'Im Thread über eine anonyme Methode aktualisiert' 
     end
     )
   );
   
 wobei eine anonyme Methode übergeben wird.
 
 Entsprechend kann der Entwickler die Methode Queue mit den gleichen Parametern wie oben 
 anstatt eine andere TThread-Klasse als ersten Parameter zu übergeben, und
 den aufrufenden Thread in eine Warteschlange mit dem anderen Thread zu stellen.
   
}
{ TMyTheadClass }
procedure TMyTheadClass.Execute;
begin
  NameThreadForDebugging(mythreadname');
  { Thread-Code hier einfügen }
end;
end.


//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
//   Wichtig: Methoden und Eigenschaften von Objekten in der VCL können nur
//   in Methoden verwendet werden, die mit Synchronize aufgerufen wurden, z.B.:
//
//      Synchronize(&UpdateCaption);
//
//   wobei UpdateCaption ao aussehen könnte:
//
//      void __fastcall TMyThreadClass::UpdateCaption()
//      {
//        Form1->Caption = "Im Thread aktualisiert";
//      }
//---------------------------------------------------------------------------
__fastcall TMyThreadClass::TMyThreadClass(bool CreateSuspended)
 : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall TMyThreadClass::Execute()
{
 NameThreadForDebugging("mythreadname");
 //---- Fügen Sie den Thread-Code hier ein ----
}
//---------------------------------------------------------------------------


Nächste Schritte

Die automatisch generierte Unit-Datei bearbeiten Sie folgendermaßen:

Siehe auch