Thread

Bestimmt die Priorität oder Unterbrechbarkeit von Threads. Zudem kann dieser Befehl vorübergehend alle Timer deaktivieren.

Thread, NoTimers [, false]
Thread, Priority, n
Thread, Interrupt [, Dauer, Zeilenanzahl]

Thread, NoTimers [, false]: Verhindert Unterbrechungen von jedem Timer, 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 Thread NoTimers nicht im automatischen Ausführungsbereich (oberster Teil des Skripts) vorkommt, können alle Threads von Anfang an unterbrochen werden (obwohl die Einstellungen von Thread Interrupt [unten] weiterhin gelten). Wenn der automatische Ausführungsbereich hingegen NoTimers aktiviert, aber nicht mehr deaktiviert, ist jeder neu gestartete Thread (z. B. Hotkey, benutzerdefinierter Menüpunkt oder Timer) immun gegen Unterbrechungen von 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 der True/False-Parameter außerdem ein Ausdruck ist, wird True in 1 und False in 0 aufgelöst.


Thread, Priority, n: Verwende für n ein Integer zwischen -2147483648 und 2147483647 (oder ein Ausdruck), um eine 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 Thread Priority.

In diesem Zusammenhang kann die Prioritätsstufe des ganzen Skripts wie folgt geändert werden: Process, Priority,, High.


Thread, Interrupt [, Dauer, Zeilenanzahl]: Dieser Befehl 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).

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

Die Interrupt-Einstellung ist global - das heißt, dass sie von allen nachfolgenden Threads berücksichtigt wird, auch dann, wenn die Einstellung außerhalb vom automatischen Ausführungsbereich geändert 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 der Zeilenanzahl-Komponente 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.

Bemerkungen

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

Siehe auch

Critical, Threads, Hotkey, Menu, SetTimer, Process

Beispiel

Thread, priority, 1 ; Setzt die Priorität des aktuellen Threads etwas höher als normal.
Thread, interrupt, 0  ; Jeder neu gestartete Thread ist sofort unterbrechbar.
Thread, interrupt, 50, 2000  ; Jeder Thread wird nach 50 ms oder 2000 Zeilen unterbrechbar, je nachdem, was zuerst kommt.