Der timespec
Die Struktur stellt die Zeit in zwei Teilen dar – Sekunden und Nanosekunden. Daher ist der Algorithmus für die Umwandlung von Millisekunden verdammt einfach. Eine Sekunde hat tausend Millisekunden, eine Millisekunde hat tausend Mikrosekunden und eine Mikrosekunde hat tausend Nanosekunden, wofür wir SI dankbar sind. Daher müssen wir zuerst Millisekunden durch Tausend teilen, um eine Anzahl von Sekunden zu erhalten. Sagen Sie zum Beispiel 1500 Millisekunden / 1000 =1,5 Sekunden. Bei ganzzahliger Arithmetik (kein Fließkomma) wird der Rest weggelassen (dh 1500 / 1000 ist gleich 1, nicht 1,5). Dann müssen wir einen Rest nehmen, der eine Anzahl von Millisekunden angibt, die definitiv kleiner als eine Sekunde ist, und ihn mit einer Million multiplizieren, um ihn in Nanosekunden umzuwandeln. Um einen Rest der Division durch 1000 zu erhalten, verwenden wir einen Moduloperator (%
) (also 1500 % 1000 is equal to 500
). Konvertieren wir zum Beispiel 4321 Millisekunden in Sekunden und Nanosekunden:
- 4321 (Millisekunden) / 1000 =4 (Sekunden)
- 4321 (Millisekunden) % 1000 =321 (Millisekunden)
- 321 (Millisekunden) * 1000000 =321000000 (Nanosekunden)
Wenn Sie das oben Gesagte wissen, müssen Sie nur noch ein wenig C-Code schreiben. Es gibt ein paar Dinge, die Sie nicht richtig verstanden haben:
- In C müssen Sie Strukturdatentypen
struct
voranstellen . Sagen Sie beispielsweise statttimespec
Sie sagenstruct timespec
. In C++ muss man das aber (meiner Meinung nach leider) nicht. - Sie können keine Strukturen von der Funktion in C zurückgeben. Daher müssen Sie eine Struktur per Zeiger an eine Funktion übergeben, die etwas mit dieser Struktur macht.
Bearbeiten:Dies widerspricht (Return a `struct` from a function in C).
OK, genug geredet. Unten ist ein einfaches C-Codebeispiel:
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
static void ms2ts(struct timespec *ts, unsigned long ms)
{
ts->tv_sec = ms / 1000;
ts->tv_nsec = (ms % 1000) * 1000000;
}
static void print_ts(unsigned long ms)
{
struct timespec ts;
ms2ts(&ts, ms);
printf("%lu milliseconds is %ld seconds and %ld nanoseconds.\n",
ms, ts.tv_sec, ts.tv_nsec);
}
int main()
{
print_ts(1000);
print_ts(2500);
print_ts(4321);
return EXIT_SUCCESS;
}
Ich hoffe es hilft. Viel Glück!