(AutoHotkey)(AutoHotkeyのタイマーについて 編)

 ええと まずは 「もらかな は ヌケ作でした パート2」の報告からですが 笑)

API関数の SetTimerで コールバック関数を使った タイマー処理をしたい 編』
http://d.hatena.ne.jp/morakana/20080127/1201458906
 AutoHotkeyには 最初から SetTimerコマンドが用意されています
これは 気軽に使えて便利なのですが ひとつのスクリプトの中で 一つしか使えません
と さらっと 嘘を書いてましたね 笑)
ラベル名を変えれば 複数個の タイマーを同時に動かす事が出来ます
タイマーをスタートさせる方法は
	SetTimer, On_Timer1, 1000
	SetTimer, On_Timer2, 1000
On_Timer1 と On_Timer2 という ラベルの サブルーチンを用意すれば OKです
タイマーを停止させる時は
	SetTimer, On_Timer1, Off
	SetTimer, On_Timer2, Off
ですね

 ただし API関数のタイマー を 使って呼び出している時とは 微妙に動作が違うようです
API関数のタイマー は 時間が経過すると 否が応でも 次の コールバック関数を呼び出します が
AutoHotkeyのタイマーは 現在のコールバックサブルーチンを処理中なら 次のコールバックサブルーチン呼び出しが行われません

 例えば 一定時間ごとに MsgBoxを表示させるプログラムを書いてみると
API関数のタイマー は OKを押して MsgBoxを閉じなくても 時間が来れば 次の MsgBoxを開きます が
AutoHotkeyのタイマーだと MsgBoxを閉じないと 次の MsgBoxは 開きません
ただし イベント間隔は 計測しているらしく 前回呼び出しより時間が過ぎていれば 即座に 次の MsgBoxが出てきました
これは おそらく 「サブルーチンに書いているか」「関数に書いているか」の違いなんじゃないでしょうか?

 ならば この動作の違いは 「ケースバイケースで 都合のいい方を利用する」ようにした方が良さそうですね