ThreadPriority()

Syntaxe

Resultat = ThreadPriority(Thread, Priorite)
Description
Change la priorité du thread spécifié et renvoie l'ancienne priorité.

Arguments

Thread Le thread à utiliser.
(Cette valeur provient de CreateThread().)
Priorite Peut prendre une valeur entre 1 et 32.
0, aucun changement n'est effectué (utile pour seulement trouver le niveau de priorité du thread sans le modifier).
1 est la priorité la plus basse, 16 est une priorité normale et 32 correspond à un niveau de priorité en temps réel (la plus haute, à n'utiliser que si vous êtes sûr de ce que vous faites).

Windows ne supporte pas les 32 niveaux de priorité, voici le tableau correspondant:
  - 1 : Le plus bas
  - Entre 2 et 15 : En dessous de la normale 
  - 16: Normal
  - Entre 17 et 30: Au dessus de la normale
  - 31: Le plus haut
  - 32: Temps critique

Valeur de retour

Renvoie la priorité du thread avant l'appel de cette commande. Ce qui peut être utile si vous voulez seulement augmenter la priorité du thread pour un court moment et ensuite revenir à l'ancienne valeur. La valeur renvoyée n'est pas nécessairement la même que celle donnée en paramètre de ThreadPriority(), car elle dépend de la granularité du réglage de la priorité offerte par le système.

Remarques

Un thread avec une haute priorité et qui utilise beaucoup de temps, comme le traitement d'image par exemple, monopolisera le processeur et les autres threads auront peu de chance de s'exécuter. Réservez donc les hautes priorités aux threads qui demande peu de temps d'exécution.

Windows planifie les threads, il choisit celui qui tournera pendant un court laps de temps, en utilisant une stratégie préemptive de même niveau de priorité. Cela signifie que s'il est temps d'exécuter un autre thread (comme un changement de contexte), alors le thread avec la plus haute priorité disponible sera le prochain à être exécuté. S'il y a plus d'un thread avec la plus haute priorité alors ils seront alternés en fonction du contexte.

Exemple

  ; Une procedure toujours en cours d'exécution 
  ; (aucune commande Delay n'est employée
  ; car cela obligerait le thread à s'arrêter 
  ; pendant qu'il serait en attente)
  Procedure ImprimeUnTruc(*Intervalle)
    For i = 0 To 1000000000
      ; occupé par une méchante attente
    Next
  EndProcedure
  
  If OpenConsole()
    thread = CreateThread(@ImprimeUnTruc(), 500)
    If thread
      ; Augmente la priorité au-dessus du thread principal
      ; Vous devriez remarquer un délai avant que la commande d'impression
      ; ne soit exécutée. Maintenant changez le 17 en 15 (plus bas que la priorité normale)
      ; et observez que la commande d'impression s'exécute instantanément
      ThreadPriority(thread, 17)
      PrintN("Attend que le thread de plus haute priorite se termine")
    EndIf
    
    PrintN("Appuyer sur Entree pour quitter")
    Input()
  EndIf

OS Supportés

Windows

<- ThreadID() - Thread Index - TryLockMutex() ->