Thread

Bestimmt die Priorität oder Unterbrechbarkeit von Threads. Zudem können damit vorübergehend alle Timer deaktiviert werden.

Thread, Unterbefehl , Wert1, Wert2

Die Parameter Unterbefehl, Wert1 und Wert2 sind voneinander abhängig und können wie folgt genutzt werden.

Unterbefehle

Geben Sie für Unterbefehl Folgendes an:

NoTimers

Verhindert Unterbrechungen durch beliebige Timer.

Thread, NoTimers , TrueOderFalse

Dieser Unterbefehl verhindert Unterbrechungen von beliebigen Timern, bis der aktuelle Thread entweder endet, Thread, NoTimers, false ausgeführt wird oder von einem anderen Thread unterbrochen wird, der Timer erlaubt (in diesem Fall können Timer den unterbrechenden Thread unterbrechen, bis er endet).

Wenn dieser Unterbefehl nicht im automatischen Ausführungsbereich (ganz oben im Skript) verwendet wird, sind alle Threads zu Beginn via Timer unterbrechbar (es sei denn, der Interrupt-Unterbefehl [unten] wurde verwendet). Wenn dieser Unterbefehl im automatischen Ausführungsbereich eingeschaltet wird, ist jeder neu gestartete Thread (z. B. Hotkey, benutzerdefinierter Menüpunkt oder Timer) immun gegen Unterbrechungen via Timer.

Unabhängig von der Standardeinstellung laufen Timer auch dann, wenn das Skript keine Threads hat (es sei denn, Pause wurde eingeschaltet).

Thread, NoTimers ist das gleiche wie Thread, NoTimers, true. Da TrueOderFalse außerdem ein Ausdruck ist, wird True in 1 und False in 0 aufgelöst.

Priority

Ändert die Prioritätsstufe des aktuellen Threads.

Thread, Priority, Stufe

Geben Sie für Stufe einen Integer zwischen -2147483648 und 2147483647 (oder einen Ausdruck) an, um die neue Priorität für den aktuellen Thread zu bestimmen. Andere Threads werden davon nicht beeinflusst. Siehe Threads für weitere Details.

Aufgrund seiner Fähigkeit, Ereignisse zu puffern, ist der Critical-Befehl grundsätzlich diesem Unterbefehl überlegen.

Mit Process Priority kann die Prioritätsstufe des gesamten Skripts geändert werden. Zum Beispiel:

Process, Priority,, High

Interrupt

Ändert die Dauer der Unterbrechbarkeit für neu gestartete Threads.

Thread, Interrupt , Dauer, Zeilenanzahl

Hinweis: Dieser Unterbefehl sollte sparsam verwendet werden, weil die meisten Skripte stabiler laufen, wenn sie Einstellungen haben, die dicht bei den Standardwerten liegen.

Standardmäßig ist jeder neu gestartete Thread für eine Dauer von 15 Millisekunden oder bei einer Zeilenanzahl von 1000 Zeilen unterbrechungsfrei, je nachdem, was zuerst kommt. Dadurch hat der Thread die Chance, seine Arbeit zu beenden, anstatt sofort von einem anderen Thread unterbrochen zu werden, der darauf warten, seine Arbeit zu beginnen (z. B. ein gepufferter Hotkey oder eine Reihe von zeitgesteuerten Subroutinen, die ausgeführt werden sollen).

Hinweis: Eine Dauer kleiner als 17 kann dazu führen, dass die tatsächliche Dauer kürzer ist oder der Thread sofort unterbrochen wird, da der system-interne Taktzähler eine Mindestauflösung von 10 bis 16 Millisekunden hat.

Sobald eine der beiden Parametern eine 0 ist, wird jeder neu gestartete Thread sofort unterbrochen. Sobald eine der beiden Parametern -1 ist, kann der Thread aufgrund dieses Parameters nicht mehr unterbrochen werden. Der Höchstwert beider Parameter ist 2147483647.

Dieser Unterbefehl ist global - das heißt, dass der Unterbefehl von allen nachfolgenden Threads berücksichtigt wird, sogar wenn der Unterbefehl irgendwo anders als im automatischen Ausführungsbereich verwendet wird. Auf unterbrochene Threads hat dies keinen Effekt, weil ihr unterbrechungsfreier Zeitraum bereits abgelaufen ist. Der aktuelle Thread bleibt ebenfalls unberührt, es sei denn, dieser Thread ist zum Zeitpunkt der Änderung des Zeilenanzahl-Parameters unterbrechungsfrei, dann wird die neue Zeilenanzahl für diesen Thread wirksam.

Falls ein Hotkey gedrückt oder ein benutzerdefinierter Menüpunkt ausgewählt wird, während der aktuelle Thread unterbrechungsfrei ist, wird dieses Ereignis gepuffert. Das heißt, dass dieses Ereignis gestartet wird, sobald der aktuelle Thread fertig ist oder unterbrechbar gemacht wird, je nachdem, was zuerst kommt. Die Ausnahme hiervon ist, wenn der Thread vor seiner Beendigung unterbrechbar gemacht wird und eine höhere Priorität als das gepufferte Ereignis hat, dann wird das gepufferte Ereignis nicht mehr gepuffert und verworfen.

Unabhängig davon wird ein Thread immer unterbrechbar gemacht, sobald dieser ein MsgBox-, InputBox-, FileSelectFile- oder FileSelectFolder-Dialogfenster anzeigt.

Jeder Parameter kann leer gelassen werden, um diesen nicht zu ändern.

Wenn Critical als erste Zeile in der Subroutine oder Funktion des Threads angegeben wird, startet der Thread unterbrechungsfrei und der Interrupt-Unterbefehl hat keine Wirkung. Allerdings gilt das nicht für gebundene Funktionen oder benutzerdefinierte Funktionsobjekte.

Bemerkungen

Aufgrund seiner höheren Flexibilität und seiner Fähigkeit, Ereignisse zu puffern, ist der Critical-Befehl grundsätzlich nützlicher als die Unterbefehle Interrupt und Priority.

Siehe auch

Critical, Threads, Hotkey, Menu, SetTimer, Process

Beispiele

#1

Thread, Priority, 1 ; Setzt die Priorität des aktuellen Threads etwas höher als normal.
Thread, Interrupt, 0  ; Macht jeden neu gestarteten Thread sofort unterbrechbar.
Thread, Interrupt, 50, 2000  ; Macht jeden Thread nach 50 ms oder 2000 Zeilen unterbrechbar, je nachdem, was zuerst kommt.