v.0.008
このプログラムについて
今のWindowsはマルチメディアタイマをもっているので,たとえばC++ならば,timeGetTime()というAPIを使うとWindowsが起動してからの時間をいつでもミリ秒単位で得ることができます。ですから,反応時間を測定する程度の課題ならば簡単です。しかし,運動知覚の実験のように,画面のリフレッシュに合わせて運動刺激を提示しながら,同時にキー押しなどの反応もリアルタイムに監視しようとすると,一般に割り込みを使ったプログラミングが必要になってきます。
Windowsでの心理実験が一般的になる以前の大昔,MS-DOSというOSのもとで動く割り込みタイマ制御のプログラムを書いていたので(吉田,1994),それをWindows版に(少し機能は違うが)書き換えたものをこのストップウォッチのサンプルで使っています(mstimer.cpp)。
よほどマニアックなことをするのでなければ必要ないかもしれませんが(マニアックな実験をする人なら自分で作るでしょうが),サンプルプログラムとして公開します。昔作ったものから単にいらないところを削除しただけのプログラムなので,プログラムの本体部分はVisual C++のウィザードが吐き出したコード(MFCを使用)をそのまま使っています(わかりにくいと思いますが,すみません)。
同梱のプロジェクトファイルはVisual Studio 2012のものです。
動作環境
[ハードウェア]
[OS]
- 変なことはしていないのでXPなど古いWindowsでも動くのではないかと思います(手元にないので確認できませんが)。
使い方
- プログラム(mstimer.exe)を起動すると,図1のようなウィンドウが開きます。
- 操作方法は以下のとおりです(ボタンはマウスボタンを放したときにメッセージが伝わりますので,ショートカットキーを押す方がより正確だと思います)。

図1 プログラムウィンドウ
ボタンとショートカットキー
- [START](S)…タイマのカウントを始めます。
- [STOP](P)…タイマを停止させます。
- [RESET](R)…タイマのカウンタを0にリセットします。
- [MEMORY](M)…現在のカウンタ値をメモリ(左のリストボックス)に登録します。
- [CLEAR](C)…メモリ(左のリストボックス)をクリアします。
- [OPTION](O)…Window98時代はPCが遅くて割り込み制御の負荷が高かったので,カウンタ表示のためのメッセージ生成間隔を変更するために作ったものですが,現在のPC&OSではデフォルトの1msから変更する意味はありません。
- [EXIT](X)…プログラムを終了させます。
制限事項等
- 作者(吉田)は,このプログラムの動作を一切保証するものではありません。ご自身の責任のもとでお使いいただくようお願いします。
- サンプルソースは自由に参考にして使ってもらって構いません(割り込みを使っているので気をつけて)。
その他
- このサンプルでは,ボタン押し(マウス操作)やキー押しをMFC(Microsoft Foundation Classライブラリ)のCDialogのサービスに任せていますが,実際に実験プログラムを作るときには,マウスの状態やキーの状態を低いレベルで監視することをよくします(たとえば,GetAsyncKeyState()などのAPIを使って)。そうしなければ,タイマがミリ秒単位で正確に計時していても,キー押しなどの検出の時点で誤差が混入する可能性が残されます(タッチインタフェースの場合はまた別ですが)。
ダウンロード
zipファイルを解凍してお使いください。
タイマ・プログラム(mstimer)のダウンロード…mstimer008.zip