2017-12-05 5 views
2

Ich muss einige Daten über das Netzwerk mit Zeitstempeln senden, sollte diese Zeit hohe Präzision haben. Mit Blick auf std::chrono Uhren habe ich herausgefunden, dass std::chrono::*_clock::now()time_point zurückgibt, die abhängig von der Uhr Epoche ist. Ich habe nicht herausgefunden, welche Epoche in jeder Uhr verwendet wird und welche davon sicher verwendet werden kann, wenn sie im Netzwerk gesendet wird. Zum Beispiel auf Windows High_Resolution_clock ist Wrapper um QueryPerformanceCounter es hat gute Präzision, aber, ich denke, nutzlos als Zeitstempel für Netzwerkaufgaben.Std Chrono Zeitsynchronisation

So Frage ist, wie man Hochauflösungsuhr über Netz "synchronisiert"?

+0

Können Sie Ihre Definition von _ "high precision" _ (zu Ihrem Beitrag) hinzufügen, da dies ein sehr subjektiver Begriff ist. Sie können auch klären, wie Sie die Zeit über das Netzwerk zwischen den kommunizierenden Computern synchronisieren, da die Verwendung der lokalen Computeruhr (n) wahrscheinlich nicht genau genug ist. –

Antwort

2

std::chrono::system_clock der Epoche ist derzeit nicht näher bezeichnet. Es ist jedoch portabel ein Maß für die Zeit seit 1970-01-01 00:00:00 UTC, unterlassen Schaltsekunden. Dies steht im Einklang mit dem, was Unix Time genannt wird.

Ich arbeite derzeit an standardize this existing practice. Ich habe private, inoffizielle Zusicherungen von den Herstellern von std::chrono::system_clock, dass sie ihre bestehende Praxis in der Zwischenzeit nicht ändern werden.

Die anderen beiden std -definierten Chrono-Uhren: high_resolution_clock und steady_clock, haben keine portabel definierten Epochen.

Beachten Sie, dass system_clock, obwohl es eine (de-facto) portable Epoche hat, keine tragbare Präzision hat. Auf clang/libC++ ist die Genauigkeit Mikrosekunden. Auf gcc beträgt die Genauigkeit Nanosekunden und unter Windows beträgt die Genauigkeit 100ns. So könnten Sie time_point_cast<microseconds>(system_clock::now()) tragbare Präzision erhalten.

1

Wenn Sie "hohe Präzision" (Sie sollten besser angeben) Synchronisation benötigen, müssten Sie zunächst alle Ihre Netzwerkgeräte regelmäßig mit dem gleichen NTP-Server synchronisieren. Sie müssen die Maschinen so konfigurieren, dass die Uhren alle paar Minuten (oder Sekunden) angepasst werden, da die Uhren nach der Aktualisierung (mit einigen Netzwerkverzögerungen, die sie im Millisekundenbereich nicht präzise machen) wieder anfangen zu driften.

Verwandte Themen