2012-02-26 11 views
3

は私がする必要があると思いますものです:C++で移植性の良い精度のダブルタイムスタンプ?ここ

getdoubletimestampsomehow()は、与えられた日からの経過秒数を表すdouble値を返す関数を使用して簡単にストレートフォワードする必要があります
double now=getdoubletimestampsomehow(); 

。私はそれをかなり正確にする必要がありますが、実際には数ミリ秒より正確である必要はありません。移植性は非常に重要です。どこにでも直接移植することができない場合は、UNIXとWindowsの両方の方法で教えてください。

+0

あなたは何を見てきましたか?そのような可能性はなぜ不十分ですか? [Boost](http://www.boost.org/doc/libs/1_49_0/doc/html/date_time.html)と[Qt](http://developer.qt。)の日付/時刻機能を調べましたか? nokia.com/doc/qt-4.8/qdatetime.html)?本当にタイムスタンプが 'ダブル 'になる必要がありますか? –

+2

可能な複製の[C++クロスプラットフォーム高解像度タイマ](http://stackoverflow.com/questions/1487695/c-cross-platform-high-resolution-timer) –

答えて

2

C++でポータブルの精度の良いダブルタイムスタンプ?

サードパーティのライブラリを使用しないと、高精度のタイムスタンプ(ミリ秒)を取得する移植性の高い方法はありません。最大精度は1秒で、time/localtime/gmtimeです。

あなたがサードパーティのライブラリと罰金している場合は、使用するかブーストやQtの4

両方UNIXとそれを行うには、Windowsの方法はありますか?

GetSystemTime(Windows)およびgettimeofday(Linux)。

タイムスタンプを使用していくつかのイベントの順序を決定する予定がある場合は、悪い考えかもしれません。システムクロックの精度は非常に限定されている可能性があります(Windowsプラットフォームでは10ミリ秒)。この場合、結果として実行されるいくつかの操作で同じタイムスタンプが生成される可能性があります。したがって、イベントの順序を決定するには、"logical timestamps"(「ベクトル時計」の例の1つ)が必要です。 Windowsプラットフォーム上で

以来、過去のある時点QueryPerformanceCounter)を経過しているが、それらはタイムスタンプに接続されていないどのくらいの時間を決定するために使用することができ、高精度な機能があります。

+0

残念ながら(またはfortunatly :))この回答は古いです(C++ 11)。 –

-1

ダブルスは正確ではありません。したがって、double now=getdoubletimestampsomehow();のアイデアは、最初のハードルに落ちます。

他にも他の可能性があります。私はそれらを探索するだろう。

+0

'double'は有限で多様な精度を持っています。これは「正確ではない」と同じではありません。 –

2

C++ 11はかなりのポータブルクロックを含む<chrono>ヘッダーを紹介しました。その中で最も解像度の高いクロックはstd::chrono::high_resolution_clockです。

オブジェクトの現在の時刻は、time_since_epochです。これはあなたが望むものを含んでいるかもしれません。

Reference

前にC++ 11標準のリリースに、一方が正確にコードの一部の実行時間を測定することができた標準的な方法はなかったです。プログラマーは、Boostのような外部ライブラリや、各オペレーティングシステムによって提供されるルーチンを使用するように強制されました。

C++ 11クロノ・ヘッダ・ファイルは、タイミング1のコードを使用することができる3つの標準クロックを提供する:

  • SYSTEM_CLOCK - これは、システムによって使用されるリアルタイムクロックです。
  • high_resolution_clock - これは現在のシステムで最短ティック時間が可能なクロックです。
  • steady_clock - 決して調整されないことが保証されている単調時計です。

特定のコードが実行されるのにかかる時間を測定する場合は、通常、システムによって決して調整されない単調時計であるsteady_clockを使用する必要があります。クロノヘッダーによって提供される他の2つのクロックは時々調整することができるので、連続する2つの時間モーメントの差t0 < t1は必ずしも正ではありません。