GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Konvertieren Sie Millisekunden in eine Zeitangabe für die GNU-Portierung

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:

  1. 4321 (Millisekunden) / 1000 =4 (Sekunden)
  2. 4321 (Millisekunden) % 1000 =321 (Millisekunden)
  3. 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:

  1. In C müssen Sie Strukturdatentypen struct voranstellen . Sagen Sie beispielsweise statt timespec Sie sagen struct timespec . In C++ muss man das aber (meiner Meinung nach leider) nicht.
  2. 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!


Linux
  1. Shedbuilt GNU/Linux:Eine pädagogische Distribution exklusiv für ARM-Boards

  2. Virtueller serieller Port für Linux

  3. Depends.exe für GNU/Linux

  4. Maximalwerte für time_t (struct timepec)

  5. So ändern Sie die Portnummer für die Jenkins-Installation In Ubuntu 12.04

So ändern Sie den Port für Jenkins

So suchen Sie unter Linux nach Listening Ports (Ports in use)

SSLH – Teilen Sie einen gleichen Port für HTTPS und SSH

Automatische Bildverbesserung für Ubuntu

Ideale Hardware für GNU/Linux-Laptops

Öffnen Sie Port 8080 zum Abhören