Frage

Ich werde einen kleinen dedizierten Server in C / C ++ zu entwickeln, die die Verfügbarkeit von immer benötigen. Ich habe in einige Zeitfunktionen an, als Millisekunde Timing für die Berechnungen erforderlich ist. Ich habe 2 Probleme, dass ich bin vor:

  1. eine 32-Bit-Integer-Verwenden der Anzahl von Millisekunden zu speichern, da der Betrieb bei begann wird umschlingen über die 49 Tage Zurücksetzen markieren auf Null. Ich habe darüber nachgedacht, 64-Bit-Integer verwenden, gettimeofday mit Mikrosekunden zu holen, aber das bringt mich zum zweiten Teil.

  2. Es scheint keine Standard-Systemaufrufe werden für verstrichenen Millisekunden erhalten, die Plattform sind unabhängige

Was soll ich tun, diese beiden Probleme zu lösen?

War es hilfreich?

Lösung

  1. Verwenden Sie eine 64-Bit-Ganzzahl, die Annahme gibt Ihnen genügend Zeit,

  2. Sie sind richtig; gibt es keinen Standard. Eine Möglichkeit wäre die Verwendung des Boost-Datetime Bibliothek alternativ eine andere oder Ihre eigene Rolle finden.

Good Luck!

Andere Tipps

Wie bereits gesagt wurde, das erste Problem, das Sie konfrontiert werden wird, eine zuverlässige Millisekunden genaue Zeit zu erhalten.

Ich gebe zu, ich bin ein bisschen durch die Frage Phased though.

kann ich die Notwendigkeit für eine präzises Timing (Millisekunden Niveau, auch Mikrosekunde) verstehen, sondern ein 50 Tage bei einer Millisekunde Ebene Timing scheint ... seltsam.

Sie sollten vielleicht Ihre Notwendigkeit zuerst überprüfen, aber es ist selten, nach Bedarf mehr als 6 oder 7 signifikante Stellen ... und ich habe Angst, dass Sie versuchen, eine eine Größe zu erhalten passten sie all Dauer-Objekt.

Vielleicht, dass Sie Ihre Dauern stattdessen klassifizieren sollte:

  • ein paar Minuten bei den meisten> Verwendung Millisekunde Präzision
  • sonst> verwenden zweite Präzision (die berühmte Zählung seit 1. Januar 1970)

Weil ... was ist der Sinn von 1/10 Sekunde im Maßstab von 2 Monaten?

Offensichtliche. Verwenden Sie 64-Bit-Integer mit plattformspezifischen Code, um die Anzahl von Millisekunden zu erhalten. Unter Unix einschließlich OSX, möchten Sie gettimeofday. Unter Windows, viel Glück eine zuverlässige Millisekunden-Granularität Zeitquelle bekommen; der Code in der Tcl-Bibliothek Dazu wirklich komplex ist, da es einige bösen Fallstricke in der Gegend ist.

Antwort auf 1: Wenn das „Millisekunde Timing“, dass Sie messen unter etwa 20 Tagen, können Sie die Zeiten als unsigned Werte subtrahieren und das Ergebnis als Wert mit Vorzeichen überprüfen. Dies sollte das richtige Ergebnis mit Einwickeln Timer (Verpackung von 0xffffffff zu 0x00000000) geben. Wenn Ihr Timing über 20 Tage ist, müssen Sie mehr Bits.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top