El timespec
La estructura representa el tiempo en dos partes:segundos y nanosegundos. Por lo tanto, el algoritmo para la conversión de milisegundos es bastante simple. Un segundo tiene mil milisegundos, un milisegundo tiene mil microsegundos y un microsegundo tiene mil nanosegundos, por lo que agradecemos a SI. Por lo tanto, primero debemos dividir los milisegundos por mil para obtener una cantidad de segundos. Digamos, por ejemplo, 1500 milisegundos / 1000 =1,5 segundos. Dada la aritmética de enteros (no un punto flotante), el resto se elimina (es decir, 1500/1000 es igual a solo 1, no 1,5). Luego, debemos tomar un resto que denota una cantidad de milisegundos que definitivamente es menos de un segundo y multiplicarlo por un millón para convertirlo en nanosegundos. Para obtener un resto de dividir por 1000, usamos un operador de módulo (%
) (es decir, 1500 % 1000 is equal to 500
). Por ejemplo, convirtamos 4321 milisegundos a segundos y nanosegundos:
- 4321 (milisegundos) / 1000 =4 (segundos)
- 4321 (milisegundos) % 1000 =321 (milisegundos)
- 321 (milisegundos) * 1000000 =321000000 (nanosegundos)
Sabiendo lo anterior, lo único que queda es escribir un poco de código C. Hay algunas cosas que no hiciste bien:
- En C, debe prefijar los tipos de datos de estructura con
struct
. Por ejemplo, en lugar de decirtimespec
dicesstruct timespec
. En C++, sin embargo, no tienes que hacerlo (desafortunadamente, en mi opinión). - No puede devolver estructuras desde la función en C. Por lo tanto, debe pasar una estructura por puntero a una función que haga algo con esa estructura.
Editar:Esto contradice (Devuelve una `estructura` de una función en C).
Bien, basta de hablar. A continuación se muestra un ejemplo de código 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;
}
Espero eso ayude. ¡Buena suerte!