経過時間を示すElapsed/ElapsedMilliseconds/ElapsedTicksプロパティはStopメソッドで停止した状態でないと更新された値を取得できない。
あれ?そうだったかな。と、疑問に思ったので確かめてみた。
Elapsed プロパティの値は、ストップウォッチがすでに停止している場合にのみ更新されます。
ちゃんとヘルプにもそう書かれていました。
そうすると記憶違いかな。
とりあえず動作を確認してみると、Stopメソッドで停止した状態でなくても、ちゃんと計測されているみたい。
uses
SysUtils, Diagnostics, TimeSpan;
var
sw: TStopwatch;
begin
try
sw := TStopwatch.Create;
sw.Start;
Sleep(1000);
Writeln(sw.ElapsedMilliseconds);
Sleep(1000);
Writeln(sw.ElapsedMilliseconds);
Sleep(1000);
sw.Stop;
Writeln(sw.ElapsedMilliseconds);
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
実行結果
1000
2000
3000
ヘルプには「TStopwatch では、オペレーティング システム依存の機能を利用して、高解像度タイマにアクセスします(高解像度タイマを使用できない場合は、通常のタイマが使用されます)。 (Diagnostics.TStopwatch – XE API Documentation)」と書かれているので、環境によるのかもしれない。
2011年9月24日追記
元記事が修正されています。
また「Owl’s perspective: TStopwatchその2」でヘルプの記述が間違っている歴史的理由が考察されています。