GNU/Linux >> Znalost Linux >  >> Linux

Převeďte milisekundy na časový údaj pro port GNU

timespec struktura představuje čas ve dvou částech – sekundách a nanosekundách. Algoritmus pro převod z milisekund je tedy zatraceně jednoduchý. Jedna sekunda má tisíc milisekund, jedna milisekunda má tisíc mikrosekund a jedna mikrosekunda má tisíc nanosekund, za což jsme vděčni SI. Proto musíme nejprve vydělit milisekundy tisíci, abychom získali počet sekund. Řekněme například 1500 milisekund / 1000 =1,5 sekundy. Vzhledem k celočíselné aritmetice (ne s pohyblivou řádovou čárkou) se zbytek vynechá (tj. 1500 / 1000 se rovná pouze 1, nikoli 1,5). Pak musíme vzít zbytek, který označuje počet milisekund, který je rozhodně menší než jedna sekunda, a vynásobit ho milionem, abychom jej převedli na nanosekundy. K získání zbytku z dělení 1000 používáme modulový operátor (% ) (tj. 1500 % 1000 is equal to 500 ). Převeďme například 4321 milisekund na sekundy a nanosekundy:

  1. 4321 (milisekundy) / 1000 =4 (sekundy)
  2. 4321 (milisekundy) % 1000 =321 (milisekundy)
  3. 321 (milisekundy) * 1000000 =321000000 (nanosekundy)

S vědomím výše uvedeného zbývá pouze napsat trochu C kódu. Je několik věcí, které jste nepochopili správně:

  1. V C musíte datovým typům struktury předponovat struct . Například místo slova timespec řeknete struct timespec . V C++ to ale dělat nemusíte (podle mě bohužel).
  2. Nemůžete vrátit struktury z funkce v C. Proto musíte předat strukturu ukazatelem do funkce, která s touto strukturou něco dělá.

Edit:To je v rozporu (Vrátí `struct` z funkce v C).

Dobře, dost řečí. Níže je jednoduchý příklad kódu C:

#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;
}

Doufám, že to pomůže. Hodně štěstí!


Linux
  1. Synfig – alternativa Adobe Animate pro GNU/Linux

  2. Temps – Inteligentní aplikace pro krásné počasí pro GNU/Linux

  3. Virtuální sériový port pro Linux

  1. Depends.exe pro GNU/Linux

  2. Maximální hodnoty pro time_t (struct timespec)

  3. Jak vybrat statické číslo portu pro vlastní aplikaci?

  1. Poslouchejte žádost o wakeonlan

  2. Ideální hardware pro notebooky GNU/Linux

  3. otevřený port 8080 pro poslech