Critical

提供: AutoHotkey Wiki
移動: 案内検索

実行制御 | GUI表示 | 演算・変数 | メモリ・DLL操作 | 文字列操作 | キーボード | マウス | シェル | ウィンドウ | ウィンドウグループ
ステータスバー | コントロール | サウンド | ファイル | INIファイル | レジストリ | 環境変数 | AutoHotkey | その他 | 設定関係 | オブジェクト

Critical[編集]

現在のスレッドへの割り込みを禁止する。

Critical[,MessageCheckInterval]
Critical,Off
Critical

Parameters[編集]

引数名 説明
MessageCheckInterval Critical状態の間のウィンドウメッセージのチェック間隔をミリ秒で指定する。
デフォルトは16ミリ秒。
非Critical状態では、5ミリ秒間隔でチェックされる。
大きな値を指定して、メッセージのチェックを行われないようにしても、実行速度はごくわずかしか向上しない。
Off 第1引数に Offを指定すると、Critical状態を解除し、割り込みを受け付けるようにする

Remarks[編集]

スレッドの優先順位による割り込み防止と違い、スレッドがCritical状態の時に割り込もうとしたイベントは、一時的に保存され、スレッドがCriticalでなくなったときに割り込みが発生する。

保存されたスレッドがあるときに Critical,Offを実行した場合、割り込みが行われるのは約5ミリ秒後になる。 多くの場合、この間にスクリプトの続きが数行実行される。 Critical,Offした直後に確実に割り込みを発生させたい場合、 Sleep,-1を実行するようにすればいい。

GUIウィンドウのイベントや、OnMessage()で割り当てられたメッセージイベントのためのメッセージチェックは、MessageCheckIntervalで指定した間隔で行われる。 メッセージイベントの実行中に同じメッセージを受け取った場合などには、実行されずに無視されてしまう。 CriticalでMessageCheckIntervalを大きくして、メッセージのチェックが行われる前にスレッドを終了させれば、スレッドが終了してからメッセージがチェックされるので、メッセージが無視されることを防げる。

MessageCheckIntervalの指定にかかわらず、SleepコマンドやWinWaitコマンドなどの処理を停止するコマンドを実行した場合、メッセージのチェックが行われる。 メッセージをチェックさせずに停止させたい場合、 DllCall("kernel32.dll\Sleep", "UInt", 500)のようにすればよい。

OnExitで設定されたプログラム終了イベントおよびOnMessage()で0x312番未満のメッセージに割り当てられたイベント、これらのメッセージやCritical状態のスレッドから呼び出されたRegisterCallback()|コールバック関数は、Critical状態でも割り込みが行われる。 これらの割り込みも禁止したい場合は、一時的にイベントの割り当てを解除する。

MsgBoxなどでダイアログが表示されている間は、Critical状態でも全ての割り込みが行われる。 ダイアログが閉じられた後は、再び割り込み禁止状態になる。

Critical状態はスレッドごとに保持される。 現在のスレッドがCritical状態のまま終わったとき、現在のスレッドに割り込まれて停止していたスレッドはCriticalでない状態で続行される。

Criticalが実行された時点で、そのスレッドのSetBatchLines設定は -1になる

Auto-executeセクションがCritical状態のまま終了した場合、そのスクリプトでは全てのスレッドがCritical状態で開始されるようになる。

Related[編集]

Thread (command), スレッド, #MaxThreadsPerHotkey, #MaxThreadsBuffer, OnMessage(), RegisterCallback(), Hotkey, Menu, SetTimer

Example(s)[編集]

#space::	; Win+Space hotkey.
Critical
ToolTip No new threads will launch until after this ToolTip disappears.
Sleep 3000
ToolTip		; Turn off the tip.
Return