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).

Solange dieser Unterbefehl nicht im automatischen Ausführungsbereich (oberster Teil des Skripts) vorkommt, können alle Threads von Anfang an unterbrochen werden (obwohl die Einstellungen des Interrupt-Unterbefehls [unten] weiterhin gelten). Wenn der automatische Ausführungsbereich hingegen diesen Unterbefehl aktiviert, aber nie deaktiviert, ist jeder neu gestartete Thread (z. B. Hotkey, benutzerdefinierter Menüpunkt oder Timer) immun gegen Unterbrechungen durch Timer.

Unabhängig von der Standardeinstellung laufen Timer auch dann, wenn das Skript keine Threads hat (sofern Pause nicht aktiviert wurde).

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.

Da der Critical-Befehl in der Lage ist, Ereignisse zwischenzuspeichern, ist dieser generell besser als dieser Unterbefehl.

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, sich selbst zu beenden, anstatt von einem anderen wartenden Thread sofort unterbrochen zu werden (z. B. ein zwischengespeicherter Hotkey oder mehrere zeitgesteuerte Subroutinen, die darauf warten, ausgeführt zu werden).

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 er von allen nachfolgenden Threads berücksichtigt wird, auch dann, wenn der Unterbefehl außerhalb des automatischen Ausführungsbereichs verwendet wird. Allerdings sind unterbrochene Threads davon nicht betroffen, weil deren Zeit, in der sie nicht unterbrochen werden konnten, bereits abgelaufen ist. Der aktuelle Thread ist davon auch nicht betroffen. Wenn er aber beim Ändern des Zeilenanzahl-Parameters nicht unterbrochen werden kann, 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 zwischengespeichert. Das heißt, dass dieses Ereignis gestartet wird, sobald der aktuelle Thread beendet oder unterbrechbar gemacht wird, je nachdem, was zuerst kommt. Dabei gilt folgende Ausnahme: Falls der Thread vor seiner Beendigung unterbrechbar gemacht wird und eine höhere Priorität als das zwischengespeicherte Ereignis hat, wird das zwischengespeicherte Ereignis 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

Da der Critical-Befehl flexibel einsetzbar ist und in der Lage ist, Ereignisse zwischenzuspeichern, ist dieser generell besser als die Unterbefehle Interrupt und Priority.

Siehe auch

Critical, Threads, Hotkey, Menu, SetTimer, Process

Beispiele

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.