OS2/API/タイマ

OS2/API

API

OS/2 のタイマ API:

(ほぼ)一定の時間間隔で/時間後に一度だけ、イベントセマフォにポストする。イベントセマフォは共有(DC_SEM_SHARED)でないといけない。
ユーザー関数にコールバックする機能はないので、必要な場合は、たとえば別スレッドで DosWaitEventSem 後に呼び出すとかするしかない。でもどうせスレッドがいるならその中で DosSleep ぶん回してればいいんじゃね? みたいなことになりかねない罠。

分解能

タイマAPI や DosSleep の分解能はかなり粗い。通常は 32ms 単位。つまり DosSleep(1) を100回まわすと 0.1 秒どころか3〜4秒かかる。

ただし、実行スレッドの優先度がタイムクリティカルの場合は 8ms の精度を得ることができる。さらに V4.50 レベルの OS/2 ならカーネルと CLOCK01.SYS をアップデートして CONFIG.SYS 中に CLOCKSCALE=4 を書けば 1ms 単位の分解能が得られるようだ(この場合も、タイムクリティカルスレッド以外では依然として 32ms のようだ…orz)。

とりあえず添付:tsttick_20080903.zip

ひとつ気づいたんですが、タイマ API や DosSleep の発行時だけタイムクリティカルにしておけば一応いけるのか?

あとなんかドライバ経由の高精度タイマがあったよなあ。なんだっけ。timer0? 実はよく知らない…。

参考