カレンダー

08 | 2017/09 | 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

カテゴリー

プロフィール

drednote(Mr.Ty)

Author:drednote(Mr.Ty)
既にいい年しているにも関わらずエロゲをプレイしているヤバイおっさんです。きっと還暦になってもプレイしてそうな気がする。

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

ブロとも申請フォーム

この人とブロともになる

主にエロゲのプレイ日記。他レビューっぽい事とか色々
エロゲプレイ記
  当サイト内記事にはゲームのネタバレが含まれる場合があります。
  ネタバレをみたくない方は、当サイトの閲覧をご遠慮願いますようお願い致します。
  また、当サイトの記事自体は全年齢対象ですが、
  扱っている評価物は基本的に18歳未満プレイ禁止の物が殆どですのでご注意願います。
[------]
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--------(--) --:-- スポンサー広告 | 編集 |
[20100504]
Windowsで時間計測を行う場合、QueryPerformanceCounterを使用すれば比較的容易にマイクロ秒単位での実時間計測が出来る為、今まで使用してきた人も比較的多いのではないかと思う。
(それ以外のAPIは全てミリ秒単位の計測になるため、特に音楽系での用途には若干精度が不足する場面もあった為、好んでQueryPerformanceCounterを使用していた人も多いと思う)
で、このQueryPerformanceCounterの代わりに使用できるAPIとして.NETで用意されているのがSystem.Diagnostics.Stopwatchクラスなわけだ。
このクラスは実のところ殆どQueryPerformanceCounterそっくりに出来ており、おそらく.NETを使用してマイクロ秒単位の時間計測を行いたい場合はこのクラスを使用する事がほぼ決定事項になるのではないかと思う。
で、このクラスの実装方法なんだけど、もしこのクラスが内部でQueryPerformanceCounterとQueryPerformanceFrequencyを使用していた場合には問題になる。
QueryPerformanceCounterについての問題を実験されたサイトがこちら
QueryPerformanceCounterの内部実装がどうなっているのかはわからないのだが、実験結果から不正確な時間が帰る場合があるということがわかっている以上、そのまま無闇に使用してはならないという事になると思う。
(個人的には、そもそもSleep(1000)で正確に1秒きっかり停止しているかどうかから検証すべきな気もしてますが)
今までも、そもそもQueryPerformanceCounterが使用出来ないハードかどうかを調べるために、戻り値が0かどうかをチェックするようなコードは組んでいたと思うのだが、もうそれだけでは足りないという事になりそうだ。
そしてユーザープログラムがQueryPerformanceCounterを直接呼んでいる場合は値がおかしいかどうかを判定して使用するかどうかを判断すれば良いのだが、Stopwatchクラスの場合はその判断をクラス内部で行ってしまっている為、もしここでQueryPerformanceCounterを呼ぶ方法で実装されており、且つ戻り値が0の時には使用出来ない(=DateTimeを使用する)と判定しているのであれば、ユーザープログラム側で更にStopwatchの計測時間が本当に正しいのかどうかを改めて判定させる必要があるという事になるのではないかと思う。
Stopwatchクラスの場合、今までユーザープログラム側で行っていた使用出来るか出来ないか判定をクラス内部で行っている、=Stopwatchクラスの返す値を常に信頼してプログラムを書いている、という人も居るのではないだろうか?
そういう人の場合、少なくない変更が必要になる可能性があるという事を上の実験は示していると思う。
(まぁ、そもそもStopwatchクラスが正しくない値をかえすかどうかの実験やってないんで、なんとも言えないんですけどねw)
スポンサーサイト


管理者にだけ表示を許可する
Top
http://drednote.blog92.fc2.com/tb.php/153-f859edb2

前回、QueryPerformanceCounterを実時間計測には使えないの記事で つまり、負荷が変動するような環境でQueryPerformanceCounterを使っても正しい実時間は不明ということになります。 実時間でなくていい場合(計算にかかったクロック数を比較するような場合)では使用してもそ
2010-05-04(Tue) 22:27 | 音宮志久のプログラム日記 
HOME
copyright © 2005 drednote(Mr.Ty) all rights reserved.

Template By innerlife02

RSS1.0 ,
RSSフィード

応援バナー

検索フォーム

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。