ThreadPriority()

Syntax

AltePriorität = ThreadPriority(Thread, Priorität)
Beschreibung
Ändert die Priorität des angegebenen Threads und gibt die alte Priorität zurück.

Der Prioritäts-Wert kann zwischen 1 und 32 liegen. 1 ist die niedrigste Priorität, 16 ist die normale Priorität und 32 ist die zeitkritische Priorität (die höchste Priorität; bitte benutzen Sie diese nicht - außer Sie wissen, was Sie tun).

Wird als neue Priorität 0 übergeben, dann wird die Priorität nicht verändert (nützlich, um nur die Priorität des Threads zu ermitteln, aber nicht zu verändern). Alle Threads werden mit normaler Priorität erstellt.

Normalerweise werden Sie einem ständig laufenden Thread (zum Beispiel, einem Bild verarbeitenden Thread) eine Priorität geben, die nicht größer als die jedes anderen Threads in Ihrem System ist. Der Grund dafür ist, wenn der Thread ständig läuft und eine hohe Priorität hat, dass dann kein anderer Thread die Chance hat, ausgeführt zu werden. Wenn ein Thread schnell reagieren muss, aber die meiste Zeit mit dem Warten auf einige Ereignisse (Events) verbringt, dann können Sie ihm möglicherweise eine höhere als die normale Priorität geben.

Windows managet Threads (wählt aus, welcher Thread für eine kurze Zeit läuft) durch preemptives Multitasking, welches durch Prioritäten geregelt wird. Dabei können verschiedene Threads unterschiedliche Prioritäten-Stufen haben. Dies bedeutet, wenn es Zeit zur Ausführung eines anderen Threads wird (bekannt als Context-Switch), dann wird der Thread mit der höchsten Priorität (der fertig zum Starten ist) als nächster ausgeführt. Wenn es mehr als einen Thread mit der höchsten Priorität gibt (und sie auch fertig zum Starten sind), dann wird ein Thread nach dem anderen (basierend auf "Successive Context-Switches") ausgeführt.

Parameter

Thread Der Thread, dessen Priorität geändert werden soll. Dieser Wert wird von CreateThread() zurückgegeben.
Priorität Die neue Priorität, welche dem Thread zugewiesen werden soll. Die Priorität kann 0 sein (bedeutet, dass die Priorität nicht geändert wird) oder im Bereich von 1 (niedrigste Priorität) bis 32 (höchste Priorität) liegen. 16 ist die normale Priorität. Windows unterstützt nicht 32 verschiedene Level der Priorität - hier ist eine entsprechende Tabelle:
  - 1: niedrigste
  - zwischen 2 und 15: geringer als normal
  - 16: normal
  - zwischen 17 und 30: höher als normal
  - 31: höchste
  - 32: zeitkritisch

Rückgabewert

Dieser Befehl gibt die vor dem Aufrufen dieses Befehls aktuelle Priorität des Threads zurück. Dies kann nützlich sein, wenn Sie die Priorität des Threads nur für eine kurze Zeit erhöhen möchten und danach zur vorher eingestellten Priorität zurückkehren möchten. Der zurückgegebene Wert ist nicht so notwendig wie der von ThreadPriority(), da es auch von der vom System angebotenen Prioritätsoptimierung abhängt.

Beispiel

  ; Prozedur, die immer läuft (beachten Sie, es wird kein Delay Befehl
  ; verwendet, da dies ein Anhalten des Threads während der Pause
  ; verursachen würde)
  Procedure PrintStuff(*Interval)
    For i = 0 To 1000000000
      ; böse Wartezeit
    Next
  EndProcedure

  If OpenConsole()
    thread = CreateThread(@PrintStuff(), 500)
    If thread
      ; Priorität über die des Haupt-Threads erhöhen.
      ; Sie sollten die Wartezeit vor dem Ausführen des
      ; Print Befehls beachten. Ändern Sie jetzt die 17
      ; in eine 15 (niedrige als die normale Priorität)
      ; und Sie werden feststellen, dass die Ausgabe
      ; umgehend beginnt.
      ThreadPriority(thread, 17)
      PrintN("Warte auf Thread mit hoeherer Prioritaet zum Beenden")
    EndIf
    
    PrintN("Druecken Sie Return zum Beenden")
    Input()
    CloseConsole()
  EndIf
  End

Unterstützte OS

Windows

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