Thread

AutoHotkey

Thread

设置线程的优先级或是否可以被中断。它也可以临时禁用所有的计时器

Thread, NoTimers [, false]
Thread, Priority, n
Thread, Interrupt [, Duration, LineCount]

Thread, NoTimers [, false]:防止当前线程被任何的计时器中断,直至当前线程结束,或执行 Thread, NoTimers, false,或者被另一个允许计时器的线程中断(这样的情况下计时器在它结束前可以中断正在中断的线程)。

如果在自动执行段(脚本的顶部)没有使用 Thread NoTimers,则所有线程初始都可以被计时器中断(然而后面的 Thread Interrupt 设置仍会生效)。相反地,如果在自动执行段中打开了 NoTimers 却从没有关闭它,则每个新启动的线程(例如热键自定义菜单项计时器)初始都不会被计时器中断。

不论默认的设置如何, 当脚本没有其他线程时计时器总能执行 (除非使用了 Pause).

Thread, NoTimers 相当于 Thread, NoTimers, true。此外, 由于 true/false 参数为 表达式, 计算结果为真时表示为 1, 而为假时为 0.


Thread, Priority, n:指定 n 为介于 -2147483648 和 2147483647 之间的整数(或表达式)来表示当前线程的新优先级。此语句不会影响其他线程. 请参阅线程了解详情。

由于其缓冲事件的能力,一般应优先考虑 Critical 而不是 Thread Priority

相关提示,整个脚本的操作系统优先级可以这样改变,例如:Process, Priority,, High


Thread, Interrupt [, Duration, LineCount]:应该谨慎使用此命令,因为大多数脚本在默认的设置附近时执行得更一致。

默认情况下, 每个新运行的线程在开始的 15 毫秒的 持续时间 或在开始的 1000 个脚本 行数 (无论首先遇到哪个) 执行时都是不可中断的. 这使得线程有机会结束, 而不是立即被另一个等待运行的线程中断 (例如缓冲的 热键 或一系列即将运行的 计时子程序).

如果持续时间或行数其中一个为 0, 则每个新启动的线程会被立即中断. 如果其中一个为 -1, 那么此参数会使得线程不会被中断. 这两个参数的最大值为 2147483647.

中断设置是全局的, 这意味着所有后续线程都会遵循它, 即使此设置在 自动执行段 外的某个地方被改变了. 然而, 被中断过的线程 则不受影响, 因为它们不可中断的时期已经期满 (说明:Thread, Interrupt 仅设置新线程创建时不可中断的那个时期,而被中断过的线程已经过了这个时期即随时都可能被中断, 所以不受此设置影响). 同样地, 只有在改变 LineCount当前线程 是不可中断的, 它才会受影响, 因为此时新的 LineCount 对当前线程有效.

当前线程 不可中断时如果按下了 热键 或选择了 自定义菜单项, 那么这些事件会被缓冲起来. 换句话说, 到当前线程结束或变得可中断时 (无论先遇到哪个) 它才会运行. 例外情况是当当前线程在结束前变得可中断并且它的 优先级 高于被缓冲的事件, 此时被缓冲的事件不再缓冲而丢弃了.

不论此设置如何, 当一个线程显示 MsgBox, InputBox, FileSelectFileFileSelectFolder 对话框时都将变成不可中断的.

两个参数的其中每个都可以留空来保持此设置不变.

备注

由于更大的伸缩性和缓冲事件的能力,命令 Critical 通常比 Thread InterruptThread Priority 更有效。

相关

Critical, 线程, Hotkey, Menu, SetTimer, Process

示例

Thread, priority, 1 ; 让当前线程的优先级比平均的稍高一点.
Thread, interrupt, 0  ; 让每个新启动的线程立即变成可中断:
Thread, interrupt, 50, 2000  ; 让每个线程在 50ms 或 2000 行 (无论首先遇到哪个) 之后变成可中断.