掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
キーボードイベントのリアルタイム性を上げるには? (ID:36497)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
monaaさん、ありがとうございます。睡眠時間を奪った罰として、寝ないで考えています。 本来精度はあるけど、誤差が出る要素は色々ある、というのは今まで以上に良く理解できました。 そして、それに基づくと、疑問の持ち方を変えた方が良いと思いますので、簡単なサンプル コードを作ってみました。イベントはこれだけなのですが、 TForm1 private StartTime: DWORD; { Private 宣言 } procedure TForm1.FormCreate(Sender: TObject); begin timeBeginPeriod(1); StartTime:=timeGetTime; timeEndPeriod(1); end; procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); var EndTime: DWORD; begin timeBeginPeriod(1); EndTime:=timeGetTime; timeEndPeriod(1); Memo1.Lines.Add(inttostr(EndTime-StartTime)); StartTime:=EndTime end; これを実行し、大体2秒間隔前後でいい加減にキーボードを押すと、以下の結果になりした。 2704,1983,1853,2023,1923,1792,1953,1672,2083,1973 1743,1672,2073,1783,1852,1933,2033,2093,2243,1893 1883,1862,1883,1672,1843,1632,1673,1833,1962,1693 1792,1733,1943,1772,1753,1932,2514,2484,2143,2163 2283,2574,2113,2383,2574,2123,2273,2173,2414,1873 50回分しかコピーしませんが、1/1000秒台が正確に3前後に揃ってしまうんです。100回やっても 200回やっても同じです。また、1/1000秒台の数字は、1秒台の数字*1.5の位になるようで、 1秒ちょい間隔で押すと末尾は2に、3秒ちょいで押すと末尾は5が多くなるかんじです。 こういった法則から、サンプリングレートの粗さを感じて、今回の質問となったのです。 もちろん手動計時ですから1/1000秒台の正確性は不要ですし、他の問題が多いことも理解して いますが、この正確に誤差が出る原因が分かれば、何かやれることがあるのかな、と思ったのです。 TimeGetTimeの使い方とか、何か大きな勘違いをしているのでしょうか。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.