Delphipage - la reference en Delphi
Accueil - Astuces - Composants - Programmes - Tutoriaux - Livres - Liens
 Sources
- Astuces
- Composants
- Programmes
- Tutoriaux
 Rechercher
- Delphipage
- Ngscan
 Ressources
- Lexique Delphi
- Livres
- News
- Patchs Delphi
 Liens
- Borland France
- CodeGear
- Les meilleurs sites


Tutoriaux - Threads

Présentation

Les applications multithreads sont des applications qui contiennent plusieurs chemins d'exécution simultanés.


Créer un thread

Pour créer un thread, on utilise la fonction Createthread.
Voici les paramèretres de la fonction Thread :


Paramètre
Description
IpThreadAttribute Permet de définire les privilège de sécurité.
DwStackSize Détermine la taille de ma pile du thread.
0 indique une pile standard.
IpStartAddress Pointeur sur la fonction traitement.
La fonction doit être qualifiée par StdCall.
IpParameter Paramètre éventuel passé à la fonction de traitement.
dwCreationFlags Drapeau de création du thread.
Les valeurs possibles sont CREATE_SUSPEND ou 0.
IpThreadID Variable de type DWord qui reçoit l'id du thread crée.

var ThreadID : THandle;
ThreadH : THandle;

procedure Delphipage (Edit : TEdit); stdcall;
Var a: integer;
begin
for a:=0 to 500 do
Edit.text:=IntToStr(a);
ThreadH:=0;
end;

procedure TForm1.Buton1Click(sender : TObject);
begin
ThreadH:=CreateThread(nil,0,@delphipage,Edit1,0,ThreadID);
end;

Arrêt d'un thread

Pour arrêter un thread, on dispose de deux fonctions : ExitThread et TerminatedThread.
La fonction ExitThread permet à thread de mettre fin à sa propre exécution.


procedure TForm1.Button1Click(sender : TObject);
begin
ExitThread;
end;

La fonction TerminateThread permet à un processus de mettre fin à l'un de ses threads.


procedure TForm1.Buton1Click(sender : TObject);
begin
TerminateThread(GetCurrentThread,0);
end;

L'utilisation de cette fonction n'avertit pas les DLL de la fin d'éxècution du thread. La pile du thread n'est pas libérée par cette fonction.


La pile d'un thread

La pile d'un thread est une zone mémoire allouée.
Par défaut, la pile d'un thread est de 1Mo.
Vous pouvez changer cette taille grâce au paramètre swStacksize de la fonction CreateThread.


Le changement de priorité

Pour attribuer une nouvelle priorité à un thread, on utilise la fonction SetThreadPriority.


function GetThreadPriority(hThread : THandle): Integer; stdcall;

Pour fixer un niveau de priorité, on utilise la fonction setThreadPriority.


Le temps d'exécution des threads

On dispose pour cela de la fonction GetProcessTime permettant de connaitre le temps consommé par tous les threads d'un processus.


Endomir un thread

Pour endormir un thread, il y a deux fonctions : Sleep et SleepEx.
La fonction Sleep endort le thread pour un temps fini alors que la fonction SleepEx endort le thread pour un quantum.


Attendre un événement Windows

Pour qu'un thread s'endorme et passe la main à un autre thread jusqu'il reçoive de nouveaux messages, on utilise pour cela la fonction WaitMessage.

function WaitMessage : BOOL; stdcall;

La classe TThread

Delphi propose la clasee TThread pour représenter un objet thread.
Pour l'utiliser, il faut définir une nouvelle clasee dérivée de la classe TThread puis surcharger sa méthode Execute.

La méthode Suspend

Cette méthode permetde positionner un thread dans l'état endormi.
Le thread pourra être réveillé.


procedure TForm1.Button1Click(Sender: TObject);
begin
SuspendThread(ThreadH);
end;

La méthode Resume

Pour être réveilléun thread, on utilise la méthiode Resume.


procedure TForm1.Button1Click(Sender: TObject);
begin
ResumeThread(ThreadH);
end;

La méthode WaitFor

Cette méthode permet d'attendre la fin d'éxécution d'un thread( soit à une sortie de la méthode Execute ou le passage de la propriété Terminated à True).

La propriété FreeOnTerminate


Cette propriété de type booléen permet de déterminer le responsable de la libération de la mémoire de l'objet thread.
Par défaut, cette propriété est à false. Ce qui signifie que vous êtes responsable de la libération de la mémoire de l'objet.
En mettant cette propriété à true, l'objet thread doit lui même libérer son espace mémoire à la fin du traitement.

La propriété Handle

Cette propriété permet de communiquer avec un thread.

La propriété Priority


Cette propriété permet de connaitre ou de fixer la priorité d'un thread.

La propriété Suspended


Elle permet de connaitre dynamiquement si un thread est à l'état endormi ou non.

La propriété ThreadID


Elle contient l'identificateur du thread.

La propriété OnTerminate


Elle permet d'appeler le gestionnaire dévènement OnTerminate.

La méthode DoTerminate

En surchargeant cette méthode, on peut alors executer du code losrque le thread a terminé et avant l'évènement OnTerminate.

La méthode Execute


Elle contient le traitement du thread.

La méthode Synchronize

Elle permet de protéger l'éxécution d'une méthode.

La propriété ReturnValue


Elle permet d'indiquer la valeur de retour du traitement effectué par le thread.

La propriétéTerminated

Cette méthode permet de tester régulièrement dans la méthode execute pour mettre fin à l'éxécution du thread.


Tous droits réservés - Contacts
Haut de la page