Le timespec
La structure représente le temps en deux parties - secondes et nanosecondes. Ainsi, l'algorithme de conversion à partir des millisecondes est sacrément simple. Une seconde compte mille millisecondes, une milliseconde compte mille microsecondes et une microseconde compte mille nanosecondes, ce dont nous remercions SI. Par conséquent, nous devons d'abord diviser les millisecondes par mille pour obtenir un nombre de secondes. Disons, par exemple, 1500 millisecondes / 1000 =1,5 seconde. Étant donné l'arithmétique entière (pas une virgule flottante), le reste est supprimé (c'est-à-dire que 1500/1000 est égal à 1, pas 1,5). Ensuite, nous devons prendre un reste qui indique un nombre de millisecondes nettement inférieur à une seconde et le multiplier par un million pour le convertir en nanosecondes. Pour obtenir un reste de division par 1000, nous utilisons un opérateur de module (%
) (c'est-à-dire 1500 % 1000 is equal to 500
). Par exemple, convertissons 4321 millisecondes en secondes et nanosecondes :
- 4321 (millisecondes) / 1000 =4 (secondes)
- 4321 (millisecondes) % 1000 =321 (millisecondes)
- 321 (millisecondes) * 1000000 =321000000 (nanosecondes)
Sachant ce qui précède, il ne reste plus qu'à écrire un peu de code C. Il y a peu de choses que vous n'avez pas bien faites :
- En C, vous devez préfixer les types de données de structure avec
struct
. Par exemple, au lieu de diretimespec
vous ditesstruct timespec
. En C++, cependant, vous n'êtes pas obligé de le faire (malheureusement, à mon avis). - Vous ne pouvez pas renvoyer de structures à partir de la fonction en C. Par conséquent, vous devez passer une structure par pointeur dans une fonction qui fait quelque chose avec cette structure.
Edit :Cela contredit (Renvoyer une "struct" à partir d'une fonction en C).
OK, assez parlé. Vous trouverez ci-dessous un exemple de code C simple :
#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;
}
J'espère que cela aide. Bonne chance !