Définition d'objets thread

De RAD Studio
Aller à : navigation, rechercher

Remonter à Définition d'objets thread - Index

Dans la plupart des applications, vous pouvez utiliser un objet thread pour représenter un thread d'exécution de l'application. Les objets thread simplifient l'écriture d'applications multithreads en encapsulant les utilisations les plus fréquentes des threads.

Remarque :  Les objets thread ne permettent pas de contrôler les attributs de sécurité ou la taille de la pile des threads. Si vous souhaitez contrôler ces paramètres, vous devez utiliser la fonction BeginThread. Même si vous utilisez BeginThread, vous pouvez néanmoins utiliser les objets de synchronisation de threads et les méthodes décrites dans Coordination de threads.

Pour utiliser un objet thread dans votre application (et pour créer un descendant de Classes.TThread):

  1. Choisissez une des options ci-dessous
    • Fichier > Nouveau > Autre > Projets Delphi > Fichiers Delphi > Objet Thread
    • Fichier > Nouveau > Autre > Projets C++ > Fichiers C++ > Objet Thread
  2. Dans la boîte de dialogue Nouvel objet Thread, entrez un nom de classe, tel que TMyThread.
  3. Cochez la case Thread nommé et spécifiez un nom de thread (applications VCL seulement).
  4. Cliquez sur OK. L'éditeur de code crée un nouveau fichier unité pour implémenter le thread.

Pour plus d'informations sur les threads nommés, voir Nommer un thread.

Remarque :  A la différence de la plupart des boîtes de dialogue de l'EDI demandant un nom de classe, la boîte de dialogue Nouvel objet thread ne préfixe pas automatiquement le nom de classe avec un 'T'.

Sortie

Le fichier unité automatiquement généré, ouvert dans l'éditeur de code, contient le squelette du code de la nouvelle classe thread. Si vous avez nommé ce thread TMyThread, le code doit avoir l'aspect suivant :

unit Unit1;
interface
uses
  Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF};
type
  TMyTheadClass = class(TThread)
  protected
    procedure Execute; override;
  end;
implementation
 { 
 Important: Methods and properties of objects in visual components can only be
 used in a method called using Synchronize, for example,
     Synchronize(UpdateCaption);  
 and UpdateCaption could look like,
   procedure TMyTheadClass.UpdateCaption;
   begin
     Form1.Caption := 'Updated in a thread';
   end; 
   
   or 
   
   Synchronize( 
     procedure 
     begin
       Form1.Caption := 'Updated in thread via an anonymous method' 
     end
     )
   );
   
 where an anonymous method is passed.
 
 Similarly, the developer can call the Queue method with similar parameters as 
 above, instead passing another TThread class as the first parameter, putting
 the calling thread in a queue with the other thread.
   
}
{ TMyTheadClass }
procedure TMyTheadClass.Execute;
begin
  NameThreadForDebugging(mythreadname');
  { Place thread code here }
end;
end.


//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
//   Important: Methods and properties of objects in VCL can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(&UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall TMyThreadClass::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
//---------------------------------------------------------------------------
__fastcall TMyThreadClass::TMyThreadClass(bool CreateSuspended)
 : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall TMyThreadClass::Execute()
{
 NameThreadForDebugging("mythreadname");
 //---- Place thread code here ----
}
//---------------------------------------------------------------------------


Etapes suivantes

Dans le fichier unité généré automatiquement, vous pouvez

Voir aussi