(AutoHotkey)(AutoHotkeyのタイマーについて 編)
ええと まずは 「もらかな は ヌケ作でした パート2」の報告からですが 笑)
『API関数の SetTimerで コールバック関数を使った タイマー処理をしたい 編』
http://d.hatena.ne.jp/morakana/20080127/1201458906 で
ラベル名を変えれば 複数個の タイマーを同時に動かす事が出来ます
タイマーをスタートさせる方法は
タイマーを停止させる時は
ただし API関数のタイマー を 使って呼び出している時とは 微妙に動作が違うようです
API関数のタイマー は 時間が経過すると 否が応でも 次の コールバック関数を呼び出します が
AutoHotkeyのタイマーは 現在のコールバックサブルーチンを処理中なら 次のコールバックサブルーチン呼び出しが行われません
例えば 一定時間ごとに MsgBoxを表示させるプログラムを書いてみると
API関数のタイマー は OKを押して MsgBoxを閉じなくても 時間が来れば 次の MsgBoxを開きます が
AutoHotkeyのタイマーだと MsgBoxを閉じないと 次の MsgBoxは 開きません
ただし イベント間隔は 計測しているらしく 前回呼び出しより時間が過ぎていれば 即座に 次の MsgBoxが出てきました
これは おそらく 「サブルーチンに書いているか」「関数に書いているか」の違いなんじゃないでしょうか?
ならば この動作の違いは 「ケースバイケースで 都合のいい方を利用する」ようにした方が良さそうですね
『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が出てきました
これは おそらく 「サブルーチンに書いているか」「関数に書いているか」の違いなんじゃないでしょうか?
ならば この動作の違いは 「ケースバイケースで 都合のいい方を利用する」ようにした方が良さそうですね