# 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 参数是一个 表达式, 计算结果非零值解析为真, 而 0 则为假.

Thread, Priority, n: 指定 n 为介于 -2147483648 和 2147483647 之间的一个整数(或一个 表达式) 表示当前线程的新优先级. 此命令不会影响其他线程.详见 Threads.

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

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

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

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

如果持续时间或行数其中一个为 0, 每个新运行的线程会被立即中断. 如果其中一个为 -1, 此参数将使得线程不能被中断. 这两个组件的最大值都为 2147483647.

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

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

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

两个参数中其中每个都可以留空, 这样保持设置不变.

#### 备注

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

#### 相关

Critical, Threads, Hotkey, Menu, SetTimer, Process

#### 示例

    Thread, priority, 1 ; Make priority of current thread slightly above average.
    Thread, interrupt, 0  ; Make each newly launched thread immediately interruptible:
    Thread, interrupt, 50, 2000  ; Make each thread interruptible after 50ms or 2000 lines, whichever comes first.