スレッド

AutoHotkeyは実際はパフォーマンス低下を防ぐため、擬似的なマルチスレッドを採用している。
現在のスレッドの実行中にホットキータイマーメニューアイテム選択により別のスレッドが呼び出されると、割り込みにより新たなスレッドが開始され、現在のスレッドは新たなスレッドが終了するまで停止する。
割り込みは何重にも行われることが可能。
ErrorLevel and SetKeyDelayなどの変数や設定は、スレッドごとに保持され、割り込んできたスレッド内で変更されても、割り込まれたスレッド側には影響しない。

スレッドの数には上限があり、デフォルトは10だが、#MaxThreads指令で1...20の間で設定できる。
各ホットキーで呼び出されるスレッドの数にも上限があり、デフォルトは1だが、#MaxThreadsPerHotkey指令で最大20まで設定できる。

(備考)KeyHistoryコマンドなどでキー履歴を表示すると、実行中のスレッド数が表示できる。
ListHotkeysでは、どのホットキーがスレッドを実行しているかがわかる。

スレッド優先度

全てのスレッドの優先度はデフォルトで0になる。
Threadコマンドで、現在のスレッドの優先度を変更できる。
Hotkeyコマンドの引数で、ホットキーの優先度を指定できる。
Hotstringは定義時のオプションにより優先度を指定できる。
SetTimerコマンドの引数で、タイマー起動の優先度を指定できる。
Menuコマンドの引数で、カスタムメニューアイテムの優先度を指定できる。
現在のスレッドより優先度が低い場合、割り込みは行われず、操作は無視される。

OnExitによる呼び出しは、現在スレッドの優先度にかかわらず実行される。