タイマーイベントに
Label1.Caption := DateTimeToStr(Now);
として、リアルタイムに時間を更新表示するようにしたんですが、
どうも一瞬(0.5秒くらい)ずれるみたいなんです。
個人的にTClockなどの秒が出るタスクバー時計を利用してるんですが、
どうしても少しずれます。
インターバルを変えてもあまり変化がありません。
ずれるのは仕方ないのでしょうか?(あるいはTclockのせい?)ピタリあわせる方法があればお教えいただけると幸いです。
TClockの時刻と、「日付と時刻のプロパティ」を並べてみてください。
少しだけずれる場合がありますが、これのことでしょうか。
これは、TClockが遅れているのだと思います。
もし、同じようにしたいのであれば、取得した時刻を少し遅らせて表示すればよいのでは?
お返事がおそくなってすみません。
いろいろと試してみたんですが、
同じプログラムをコピーして2つ起動すると、
やはりそれぞれのプログラムで微妙に秒が変わります。
誤差だとあきらめるか、Win32APIでも使うしかないのでしょうか…。
環境がどうなのか、同じプログラムというのがどういうもので、どういう処理をしてから時刻を表示しているかわかりませんが、単純にTEditとTTimerを貼り付けて、OnIntervalで、Edit1.Text := DateTimeToStr(Now)を実行させるプログラムを2つ立ち上げて見ていましたがかわりませんね。
# Win2k pro+Delphi5Pro
CPUやグラフィックボードの違いにもよるかもしれませんが、そこまでして同じにしたいのですか?
誤差としてあきらめられるのであれば、そうしたほうがよいと思います。
僕ならそうします。
# 仕様などにより諦められない場合もあります。
もし、同じPC内で同時に起動するアプリケーションで、時刻の表示をぴったり同じにしたければ、それぞれアプリケーションが同期を取って、タイミングをあわせて再描画する必要が出てくるかと思います。
Win32APIを使おうが、VCLを使おうが、時間を取得して描画するまでに手間取れば、どちらにしろ遅れます。
その遅れは、同じアプリケーションでも必ず一致するものではありません。
同時に起動しているプロセスによります。
# もちろん、explorer.exeやtaskmonなども関係してきます
もしかしたら、CPUを複数載せて、1プロセス1CPUにすれば一致できるかもしれません。
非現実的ではありますが。
なるほど…。
なんとなく細かい点として引っかかっていましたが、
あえて気にしないことにします。
いちおう環境的にはW2kProでP3-1G*2です。
どうも気になったものでして…。
ご指導ありがとうございました。
ツイート | ![]() |