2011年9月20日

TStopwatchその2

時間がだいぶ経ってしまったのですが、TStopwatchに関するアーティクル
経過時間を示すElapsed/ElapsedMilliseconds/ElapsedTicksプロパティはStopメソッドで停止した状態でないと更新された値を取得できない。
という記述について、山本さんほかから停止状態じゃなくても正しい値が取れるのでは?(意訳)という指摘がありました。そこでDelphi 2010/XE/XE2で実装を確認してみましたが、確かにどのバージョンでも停止状態になくても特に問題なく正しい値を取得できるようです。またDiagnostics.TStopWatchの元ねたである本家.NET FrameworkのSystem.Diagnostics.Stopwatch.Elapsedでもやはり状態に関わらず適切な値を取得できるという記述になっています。ということでElapsed/ElapsedMilliseconds/ElapsedTicksプロパティは動作状態にかかわらず正しい値を取得できる(=ヘルプの記述が正しくない)、と考えてよさそうです。ではこのヘルプの記述(わざわざ注記してある内容が正しくない)はどこからきたのでしょう?いろいろ調べてみると、これはどうもdelphi.about.comのZarko Gajicさんの

High Performance Timer in Delphi - TStopWatch - High-Resolution Counter

という記事にある実装がDelphiにおけるTStopWatchの最初のもので、この実装では停止状態でしか正しい値を取得できないことに由来するのではないかと思われます。その後(おそらくVCLに取り込まれた後に).NET FrameworkのSystem.Diagnosticsに合わせて停止状態でも正しい値が取得できるように仕様が変更されたときにヘルプを修正し忘れた、ということではないでしょうか。

ということで大変遅くなりましたが元記事のほうも記述を修正しておきました。山本さんほか指摘していただいた方(確か全力わはーの中の人がtweetしてたような…?違ったらすいません)、2ちゃんねるでツッコミいれてくれた方、ありがとうございます。

0 件のコメント: