Définition d'objets thread
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):
- Choisissez une des options ci-dessous
- Fichier > Nouveau > Autre > Projets Delphi > Fichiers Delphi > Objet Thread
- Fichier > Nouveau > Autre > Projets C++ > Fichiers C++ > Objet Thread
- Dans la boîte de dialogue Nouvel objet Thread, entrez un nom de classe, tel que TMyThread.
- Cochez la case Thread nommé et spécifiez un nom de thread (applications VCL seulement).
- 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
- Facultativement, initialiser le thread.
- Ecrire la fonction thread en remplissant la méthode Execute.
- Facultativement, écrire du code de nettoyage.