Critical

Verhindert, dass der aktuelle Thread von anderen Threads unterbrochen werden kann, oder macht ihn unterbrechbar.

Critical , OnOffNumerisch

Parameter

OnOffNumerisch

Wenn dieser Parameter weggelassen wird oder leer ist, wird standardmäßig On verwendet. Ansonsten kann eines der folgenden Dinge angegeben werden:

On: Der aktuelle Thread wird als kritisch eingestuft; das heißt, dass dieser Thread nicht von anderen Threads unterbrochen werden kann.

Off: Der aktuelle Thread wird sofort unterbrechbar gemacht, unabhängig von den Einstellungen von Thread Interrupt. Weitere Informationen finden Sie unter Critical Off.

(Numerisch) [v1.0.47+]: Geben Sie eine positive Zahl an, um Critical einzuschalten und die Anzahl der zu wartenden Millisekunden zwischen den Überprüfungen der internen Meldungswarteschlange zu ändern. Weitere Informationen finden Sie unter Meldungsüberprüfungsintervall. [v1.0.48+]: Die Angabe einer 0 schaltet Critical aus.

Verhalten von kritischen Threads

Kritische Threads sind unterbrechungsfrei; Einzelheiten finden Sie unter Threads.

Ein kritischer Thread wird unterbrechbar, wenn ein Mitteilungsfenster oder ein anderes Dialogfenster angezeigt wird. Im Gegensatz zu Thread Interrupt wird der Thread allerdings wieder kritisch, wenn der Benutzer das Dialogfenster schließt.

Critical Off

Während gepufferte Ereignisse darauf warten, neue Threads zu starten, ist es nicht möglich, Critical Off zu nutzen, um eine sofortige Unterbrechung des aktuellen Threads zu bewirken. Stattdessen vergehen durchschnittlich 5 Millisekunden, bevor eine Unterbrechung eintritt. Dadurch wird zu 99,999 % sichergestellt, dass mindestens eine Zeile nach Critical Off ausgeführt wird, bevor eine Unterbrechung erfolgt. Mit Mitteln wie Sleep -1 oder WinWait in Verbindung mit einem noch nicht existierenden Fenster können sofortige Unterbrechungen erzwungen werden.

Critical Off beendet die unterbrechungsfreie Phase des aktuellen Threads, auch wenn der Thread nicht kritisch war, so dass Ereignisse wie GuiSize früher bzw. vorhersehbarer abgearbeitet werden können.

Thread-Einstellungen

Schauen Sie sich A_IsCritical an, wie die aktuelle Einstellung von Critical gespeichert und wiederhergestellt werden kann. Beachten Sie, dass Critical eine thread-spezifische Einstellung ist, deshalb wird, wenn ein kritischer Thread endet, der darunterliegende/fortgesetzte Thread (sofern vorhanden) automatisch unkritisch sein. Somit ist es nicht notwendig, Critical Off kurz vor dem Beenden eines Threads durchzuführen.

Wenn Critical nicht im automatischen Ausführungsbereich (ganz oben im Skript) verwendet wird, sind alle Threads zu Beginn unkritisch (es sei denn, Thread Interrupt wurde verwendet). Wenn Critical im automatischen Ausführungsbereich eingeschaltet wird, ist jeder neu gestartete Thread (z. B. Hotkey, benutzerdefinierter Menüpunkt oder zeitgesteuerte Subroutine) zu Beginn kritisch.

Der Befehl Thread NoTimers ist quasi dasselbe wie Critical, aber er verhindert nur, dass Timer den aktuellen Thread unterbrechen können.

[v1.0.47+]: Beim Einschalten von Critical wird zudem SetBatchLines -1 für den aktuellen Thread wirksam.

Meldungsüberprüfungsintervall

[v1.0.47+]: Die Angabe einer positiven Zahl im ersten Parameter (z.B. Critical 30) schaltet Critical ein und ändert die Anzahl der zu wartenden Millisekunden zwischen den Überprüfungen der internen Meldungswarteschlange. Wenn keine Zahl angegeben ist, werden die Meldungen bei eingeschaltetem Critical alle 16 ms und bei ausgeschaltetem Critical alle 5 ms überprüft. Die Erhöhung des Intervalls verzögert das Eintreffen von Meldungen/Ereignissen, so dass der aktuelle Thread mehr Zeit für seine Beendigung hat. Dies verringert die Chance, dass einzelne OnMessage-Threads und GUI-Ereignisse aufgrund von "Thread wird bereits ausgeführt" verloren gehen. Wartende Befehle wie Sleep und WinWait werden Meldungen unabhängig von dieser Einstellung überprüfen (um das umgehen, können Sie z. B. DllCall("Sleep", "UInt", 500) nutzen).

Hinweis: Eine zu starke Erhöhung des Meldungsüberprüfungsintervalls kann die Reaktionsfähigkeit verschiedener Ereignisse wie z. B. GUI-Fenster-Neuzeichnungen verringern.

Thread (Befehl), Threads, #MaxThreadsPerHotkey, #MaxThreadsBuffer, OnMessage(), RegisterCallback(), Hotkey, Menu, SetTimer

Beispiele

Drücken Sie einen Hotkey, um ein Tooltip für 3 Sekunden anzuzeigen. Aufgrund von Critical wird jeder neue Thread, der während dieser Zeit gestartet wird (z. B. durch erneutes Drücken des Hotkeys), so lange hinausgezögert, bis das Tooltip verschwindet.

#space::  ; Hotkey: WIN+LEERTASTE.
Critical
ToolTip Neue Threads werden erst gestartet`, wenn dieses ToolTip verschwindet.
Sleep 3000
ToolTip  ; Schaltet das ToolTip aus.
return  ; Die Rückkehr aus einer Hotkey-Subroutine beendet den Thread. Jeder darunterliegende Thread, der fortgesetzt werden soll, ist per Definition unkritisch.