Wie kann man den Zeitunterschied in der Genauigkeit von Millisekunden und Nanosekunden von C in Linux drucken?
Lesezeit: 4 Minuten
RajSanpui
Ich habe dieses Programm, das den Zeitunterschied zwischen 2 verschiedenen Instanzen druckt, aber es druckt in Sekundengenauigkeit. Ich möchte es in Millisekunden und ein anderes in Nanosekunden Unterschied drucken.
//Prints in accuracy of seconds
#include <stdio.h>
#include <time.h>
int main(void)
{
time_t now, later;
double seconds;
time(&now);
sleep(2);
time(&later);
seconds = difftime(later, now);
printf("%.f seconds difference", seconds);
}
Wie kann ich das erreichen?
Auf welcher Plattform bist du?
– zwischenjay
29. April 2013 um 9:40 Uhr
das könnte helfen: stackoverflow.com/questions/13610471/…
– Ismet Alkan
29. April 2013 um 9:40 Uhr
@interjay: Tut mir leid, ich hätte das erwähnen sollen, es ist Linux. gcc-Compiler.
– RajSanpui
29. April 2013 um 9:42 Uhr
Sie können keine Nanosekunden-Präzision haben. stackoverflow.com/questions/13610471/…
– Lucasg
29. April 2013 um 9:42 Uhr
@georgesl du kann Holen Sie sich Zeit auf Nanosekunden-Präzision unter Linux. Es ist jedoch nicht garantiert, dass dies auf Nanosekunden genau ist, da ich glaube, dass es sich bei den meisten Architekturen um eine Interpolation zwischen zwei Mikrosekundenwerten handeln kann, die auf der internen Uhr der CPU basieren. Sie können immer verwenden clock_getres doch zu finden.
Erwarten Sie nicht, dass die Hardware-Timer eine Nanosekunden-Genauigkeit haben, selbst wenn sie eine Nanosekunden-Auflösung liefern. Und versuchen Sie nicht, Zeitdauern von weniger als einigen Millisekunden zu messen: Die Hardware ist nicht treu genug. Sie können auch verwenden clock_getres um die Auflösung einer Uhr abzufragen.
das ist wahr, es funktioniert für mich. vielen Dank @Basile
– EsmaeelE
6. August 2017 um 0:20 Uhr
Dass die Hardware nicht „treu genug“ sei, Sub-ms-Intervalle zu messen, ist eine zweifelhafte Behauptung. Wenn dies zutrifft, wäre angesichts der Genauigkeit von Quarzoszillatoren eine Erklärung erforderlich.
– gsimard
21. Oktober 2018 um 1:45 Uhr
Ich bin mir nicht sicher, ob die typische Uhr auf einem typischen Consumer-PC eine relative Genauigkeit von 1e-10 hat. Die meisten Uhren sind nicht so genau. Diejenigen, die kosten wahrscheinlich mehr als ein Auto. Ich kann nicht einmal den Anbieter solch hochpräziser Uhren nennen.
– Basile Starynkevitch
21. Oktober 2018 um 5:52 Uhr
Für rechnerisches Benchmarking ist es besser, CLOCK_PROCESS_CPUTIME_ID anstelle von CLOCK_MONOTONIC zu verwenden
– Lothar
3. März 2021 um 8:45 Uhr
Ich würde die Berechnung neu anordnen, um Rundungsfehler zu minimieren: (double) (tend.tv_sec - tstart.tv_sec) + 1.0e-9 * (double) (tend.tv_nsec - tstart.tv_nsec)
– HAL9000
5. Oktober 2021 um 21:42 Uhr
Ciro Santilli OurBigBook.com
timespec_get ab C11
Diese Funktion gibt bis zu Nanosekunden zurück, gerundet auf die Auflösung der Implementierung.
Weitere Details hier: https://stackoverflow.com/a/36095407/895245
Das ist toll. Gibt es eine einfache Möglichkeit, buff und ts.tv_sec zu einer einzigen Zeichenfolge zu verketten? Ich habe versucht, .append() in cpp ohne Erfolg zu verwenden.
– viel Glück
16. Dezember 2020 um 18:48 Uhr
@p.luck nicht sicher, ob ich die Frage verstehe. Meinst du verketten ts.tv_sec und ts.nsec in einer einzigen Saite? Dafür etwas mit strftime %D %T %s + eine Sekunde snprintf Aufruf: stackoverflow.com/questions/3774417/…
Auf welcher Plattform bist du?
– zwischenjay
29. April 2013 um 9:40 Uhr
das könnte helfen: stackoverflow.com/questions/13610471/…
– Ismet Alkan
29. April 2013 um 9:40 Uhr
@interjay: Tut mir leid, ich hätte das erwähnen sollen, es ist Linux. gcc-Compiler.
– RajSanpui
29. April 2013 um 9:42 Uhr
Sie können keine Nanosekunden-Präzision haben. stackoverflow.com/questions/13610471/…
– Lucasg
29. April 2013 um 9:42 Uhr
@georgesl du kann Holen Sie sich Zeit auf Nanosekunden-Präzision unter Linux. Es ist jedoch nicht garantiert, dass dies auf Nanosekunden genau ist, da ich glaube, dass es sich bei den meisten Architekturen um eine Interpolation zwischen zwei Mikrosekundenwerten handeln kann, die auf der internen Uhr der CPU basieren. Sie können immer verwenden
clock_getres
doch zu finden.– Werden
29. April 2013 um 10:30 Uhr