2

私はC/C++で小さな専用サーバーを開発するつもりです。それは永遠の稼働時間を必要とします。計算にはミリ秒のタイミングが必要なので、私はいくつかの時間関数を調べてきました。私が直面している2つの問題があります:

  1. 32ビット整数を使用して操作が開始されてからのミリ秒数を格納すると、約49日でラップアラウンドしてゼロにリセットされます。私は64ビット整数を使用することを考えました。gettimeofdayを使用してマイクロ秒を取得しますが、これで2番目の部分に進みます。

  2. プラットフォームに依存しない経過ミリ秒を取得するための標準的なシステムコールはないようです

これらの両方の問題を解決するにはどうすればよいですか?

4

4 に答える 4

6
  1. 十分な時間を与えると仮定して、64ビット整数を使用します

  2. あなたは正しいです; 標準はありません。1つの可能性は、Boost DateTimeライブラリを使用するか、別のライブラリを見つけるか、独自のライブラリをロールすることです。

幸運を!

于 2010-04-06T13:56:33.053 に答える
2

すでに述べたように、あなたが直面しようとしている最初の問題は、信頼できるミリ秒精度の時間を取得することです。

しかし、私は質問によって少し段階的になっていることを認めます。

正確なタイミング(ミリ秒レベル、さらにはマイクロ秒)の必要性は理解できますが、ミリ秒レベルで50日のタイミングをとるのは...奇妙に思えます。

最初にニーズを確認する必要がありますが、有効数字が6桁または7桁を超えることはめったにありません...そして、すべての期間のオブジェクトに1つのサイズで適合させようとしているのではないかと思います。

おそらく、代わりに期間を分類する必要があります。

  • せいぜい数分>ミリ秒の精度を使用
  • それ以外の場合は>2番目の精度を使用します(1970年1月1日以降の有名なカウント)

なぜなら...2ヶ月のスケールで1/10秒の意味は何ですか?

于 2010-04-06T14:39:44.577 に答える
0

明らか。ミリ秒数を取得するには、プラットフォーム固有のコードで64ビット整数を使用します。OSXを含むUnixでは、が必要ですgettimeofday。Windowsでは、信頼できるミリ秒粒度のタイムソースを取得できます。これを行うためのTclライブラリのコードは、この領域にいくつかの邪悪な落とし穴があるため、非常に複雑です。

于 2010-04-06T14:00:14.597 に答える
0

1の答え:測定している「ミリ秒のタイミング」が約20日未満の場合は、時間を符号なしの値として減算し、結果を符号付きの値として確認できます。これにより、ラッピングタイマー(0xffffffffから0x00000000へのラッピング)で正しい結果が得られるはずです。タイミングが20日を超える場合は、さらにビットが必要です。

于 2010-04-06T14:02:08.613 に答える