Source: https://coredump.uno/questions/88/is-gettimeofday-guaranteed-to-be-of-microsecond-resolution
Timestamp: 2019-01-23 10:30:36+00:00

Document:
linux - ¿Se garantiza gettimeofday () una resolución de microsegundos? - coredump.uno
Implementé QueryPerformanceCounterdando uSeconds desde el inicio del proceso:
Esto, junto con QueryPerformanceFrequency()dar una frecuencia constante de 1000000, funciona bien en mi máquina , dándome una variable de 64 bits que contiene uSecondsdesde el inicio del programa.
Entonces, ¿ es esto portátil? No quiero descubrir que funciona de manera diferente si el kernel fue compilado de una determinada manera o algo por el estilo. Sin embargo, estoy de acuerdo con que no sea portátil para algo que no sea Linux.
Publicado el 01/08/2008 a las 15:36
Tal vez. Pero tienes problemas más grandes. gettimeofday()puede dar como resultado tiempos incorrectos si hay procesos en su sistema que cambian el temporizador (es decir, ntpd). En un Linux "normal", creo que la resolución de gettimeofday()es 10us. Puede saltar hacia adelante y hacia atrás y el tiempo, en consecuencia, en función de los procesos que se ejecutan en su sistema. Esto efectivamente hace que la respuesta a su pregunta no.
Deberías buscar clock_gettime(CLOCK_MONOTONIC)los intervalos de tiempo. Sufre de varios problemas menores debido a cosas como sistemas multi-core y configuraciones de reloj externo.
Además, mira en la clock_getres()función.
Respondida el 01/08/2008 a las 03:53
Respondida el 02/08/2008 a las 09:08
Debo admitir que la mayoría de tu ejemplo fue directo a mi cabeza. Sin embargo, compila y parece funcionar. ¿Es esto seguro para sistemas SMP o SpeedStep?
Esa es una buena pregunta ... Creo que el código está bien. Desde un punto de vista práctico, lo usamos en mi compañía todos los días, y corremos en una amplia gama de cajas, todo desde 2 hasta 8 núcleos. Por supuesto, YMMV, etc., pero parece ser un método confiable y de bajo costo (porque no hace que el contexto cambie al espacio del sistema).
la ejecución fuera de orden puede causar resultados incorrectos, por lo que ejecutamos la instrucción "cpuid" que, además de proporcionarle cierta información sobre la CPU, también sincroniza cualquier ejecución de instrucción fuera de orden.
Espero que esto satisfaga tu curiosidad, es un área de programación interesante e inmemorial (en mi humilde opinión). ¿Sabes cuándo Jeff y Joel estaban hablando sobre si un programador debería saber o no C? Les estaba gritando: "Olviden las cosas C de alto nivel ... ¡el ensamblador es lo que debe aprender si quiere saber qué está haciendo la computadora!"
Respondida el 04/08/2008 a las 01:51
Puede estar interesado en las Preguntas frecuentes sobre Linux paraclock_gettime(CLOCK_REALTIME)
Respondida el 18/08/2008 a las 04:51
fuente por usuario David Schlosnagle
Respondida el 04/08/2008 a las 03:44
Al igual que otras personas han sugerido, gettimeofday()es malo porque establecer el tiempo puede provocar un sesgo en el reloj y deshacerse de su cálculo. clock_gettime(CLOCK_MONOTONIC)es lo que quieres, y clock_getres()te dirá la precisión de tu reloj.
Respondida el 02/08/2008 a las 06:57
La resolución real de gettimeofday () depende de la arquitectura del hardware. Los procesadores Intel y las máquinas SPARC ofrecen temporizadores de alta resolución que miden microsegundos. Otras arquitecturas de hardware recurren al temporizador del sistema, que generalmente se establece en 100 Hz. En tales casos, la resolución de tiempo será menos precisa.
Respondida el 01/08/2008 a las 03:55
Esta respuesta menciona problemas con el reloj siendo ajustados. Tanto los problemas que garantizan unidades de garrapatas y los problemas con el tiempo siendo ajustados son resueltos en C ++ 11 con la <chrono>biblioteca.
El reloj std::chrono::steady_clockno se garantiza que se puede modificar, y además se avanzará a un ritmo constante con respecto al tiempo real, así como tecnologías SpeedStep no debe afectar a la misma.
Puede obtener unidades typesafe mediante la conversión a una de las std::chrono::durationespecializaciones, tales como std::chrono::microseconds. Con este tipo no hay ambigüedad sobre las unidades utilizadas por el valor de la garrapata. Sin embargo, tener en cuenta que el reloj no tiene necesariamente que esta resolución. Puede convertir una duración de attosegundos sin necesidad de tener un reloj que precisa.
Respondida el 26/06/2012 a las 04:57
Según mi experiencia, y según lo que he leído en Internet, la respuesta es "No", no está garantizado. Depende de la velocidad de la CPU, el sistema operativo, el sabor de Linux, etc.
Respondida el 01/08/2008 a las 03:46
Podría sugerir intentarlo clock_gettime(CLOCK_REALTIME). El manual de posix indica que esto debe implementarse en todos los sistemas compatibles. Puede proporcionar un recuento de nanosegundos, pero es probable que desee comprobar clock_getres(CLOCK_REALTIME)en su sistema para ver cuál es la resolución real.
Respondida el 18/08/2008 a las 04:40
fuente por usuario Doug
Toma de seleccionar () funciona en Windows y el tiempo de espera en Linux
Lista de clasificación y sumando Cantidades Shellscript
Cómo utilizar los archivos ini correctamente durante la edición y la adición en Java, donde la lectura trabaja con ini4j?
¿Cómo se entiende página del manual mlockall?
pynotify Linux cambiar el texto
Cómo 'caso' un argumento
Cómo acceder a la información de la memoria como la marca y la frecuencia en Python?
Cómo agregar varios esquemas de color para Gedit
programa 2 conseguir mismos paquetes UDP en un puerto
tamaño de la consola utilizando Linux en C ++

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución