Initialisation d'un thread
Remonter à Construction d'une application multithread
Pour initialiser un objet thread
- Affectez une priorité par défaut.
- Indiquez le moment auquel le thread est libéré.
Pour affecter une priorité par défaut
- Affectez une priorité par défaut au thread à partir des valeurs du tableau ci-dessous.Utilisez une priorité élevée pour gérer les tâches critiques et une priorité basse pour les autres tâches.
Valeur |
Priorité |
tpIdle |
Le thread s'exécute seulement quand le système est en attente. Windows n'interrompt pas les autres threads pour exécuter un thread de priorité tpIdle. |
tpLowest |
La priorité du thread est deux points en dessous de la normale. |
tpLower |
La priorité du thread est un point en dessous de la normale. |
tpNormal |
La priorité du thread est normale. |
tpHigher |
La priorité du thread est un point au dessus de la normale |
tpHighest |
La priorité du thread est deux points au dessus de la normale. |
tpTimeCritical |
Le thread a la priorité la plus élevée. |
- Redéfinissez la méthode Create(Delphi) ou le constructeur par défaut (C++) de la classe thread en ajoutant un nouveau constructeur à la déclaration.
- Code lee constructeur. Voici l'exemple d'un thread à basse priorité : constructor TMyThread.Create(CreateSuspended: Boolean); begin inherited Create(CreateSuspended); Priority := tpIdle; end; TMyThread::TMyThread( bool CreateSuspended ) : TThread( CreateSuspended ) { Priority = tpIdle; }
- Indiquez si le thread doit être automatiquement libéré quand son exécution est terminée.
Avertissement : "Gonfler" la priorité du thread pour une opération utilisant intensivement la CPU peut "sous-alimenter" les autres threads de l'application. Il ne faut accorder une priorité élevée qu'à des threads qui passent l'essentiel du temps à attendre des événements extérieurs.
Pour indiquer le moment auquel un thread est libéré
- Attribuez la valeur true à la propriété FreeOnTerminate, sauf si le thread doit être coordonné avec d'autres threads.
- Si le thread doit être coordonné avec un autre thread, initialisez FreeOnTerminate à false, puis libérez explicitement le premier thread du second.