#MaxThreadsBuffer

ホットキーの一部または全部が、#MaxThreadsPerHotkeyの制限に達した場合、キー入力を無視するのではなく、バッファリングするようになります。

#MaxThreadsBuffer Setting

パラメータ

Setting

省略したときの初期設定はTrueになります。そうでないときは、次のいずれかのリテラル値を指定します:

True または 1:ここから次の#MaxThreadsBuffer False指令までのすべてのホットキーサブルーチンは、そのサブルーチンが#MaxThreadsPerHotkeyの限界に達したときに、ホットキーの押下を無視するのではなく、バッファリングします。

False または 0:ホットキーがすでに最大スレッド数(通常は1ですが、#MaxThreadsPerHotkeyで変更可能)を実行している場合は、ホットキーを押しても無視されます。

備考

このディレクティブがスクリプトで指定されていないときは、Falseに設定されているとみなされます。

This directive is rarely used because this type of buffering usually does more harm than good. 例えば、誤ってホットキーを2回押してしまった場合、この設定をONにすると、そのホットキーのサブルーチンは、最初のスレッドが1秒未満で終了した場合、自動的に2回目を実行します(このタイプのバッファは、設計上1秒後に終了します)。なお、AutoHotkeyは他にもいくつかの方法でホットキーをバッファリングしています(Thread InterruptCriticalなど)。ただ、この特殊な方法は有害であるため、デフォルトでオフになっています。

このディレクティブの主な用途は、キーボードのオートリピート機能の応答性を高めることです。たとえば、#MaxThreadsPerHotkeyの設定が1(デフォルト)のホットキーを押し続けているとき、そのホットキーサブルーチンがすでに実行されていると、キー入力は無視されます。そのため、サブルーチンが終了すると、次のオートリピートキー入力が来るのを待たなければならず、オートリピートサイクルのキー入力の間に挟まれるため、50 ms以上かかる場合があります。この50 msの遅延は、自動リピート中に最良の応答時間を必要とするホットキーに対してこのディレクティブを有効にすることで回避することができます。

他の#ディレクティブと同様に、このディレクティブもスクリプト内で関数であるかのように位置づけるべきではありません(つまり、サブルーチンの中に含ませる必要はありません)。代わりに、その影響を受けさせたい最初のホットキーの直前に配置します。

他のディレクティブと同様に、#MaxThreadsBufferは条件付きで実行することはできません。

#MaxThreads#MaxThreadsPerHotkeyCriticalThread(関数)スレッドHotkeyA_MaxHotkeysPerIntervalListHotkeys

最初の2つのホットキーが#MaxThreadsPerHotkeyの制限に達した場合、キー入力を無視するのではなく、バッファリングするようにします。

#MaxThreadsBuffer True
#x::MsgBox "This hotkey will use this type of buffering."
#y::MsgBox "And this one too."
#MaxThreadsBuffer False
#z::MsgBox "But not this one."