¿Cuál es el mejor contador de tiempo, más preciso en C++?¿Cuál es el mejor y más preciso temporizador en C++?
Respuesta
La respuesta a esto es específico de la plataforma. El sistema operativo es responsable de hacer el seguimiento de tiempo y, en consecuencia, el lenguaje C++ en sí no proporciona construcciones de lenguaje o funciones incorporadas para hacer esto.
Sin embargo, aquí hay algunos recursos para temporizadores dependientes de la plataforma:
- API de Windows -
SetTimer
: http://msdn.microsoft.com/en-us/library/ms644906(v=vs.85).aspx - Unix -
setitimer
: http://linux.die.net/man/2/setitimer
Una multiplataforma la solución podría ser boost::asio::deadline_timer.
Respuesta relevante para aplicaciones críticas no basadas en el tiempo, – Enders
bajo Windows sería QueryPerformanceCounter
, aunque ya no se ha especificado ninguna condición posible tener un temporizador de ultra alta resolución exterior que tiene una ++ interfaz de C para el conductor
gracias, pero ¿qué tal en Linux/Unix? –
@Josh: Vea mi respuesta más arriba. –
El C++ estándar no dice mucho sobre el tiempo Hay algunas características heredadas de C a través del encabezado <ctime>
.
La función clock
es la única forma de obtener sub-segundo de precisión, pero la precisión puede ser tan bajo como un segundo (que se define por la macro CLOCKS_PER_SEC
). Además, no mide el tiempo real en absoluto, sino el tiempo del procesador.
La función time
medidas en tiempo real, pero (por lo general) solamente al segundo más cercano.
Para medir el tiempo real con una precisión por debajo, es necesario una biblioteca no estándar.
En C++ 11 se puede obtener de forma portátil para el temporizador de resolución más alta con:
#include <iostream>
#include <chrono>
#include "chrono_io"
int main()
{
typedef std::chrono::high_resolution_clock Clock;
auto t1 = Clock::now();
auto t2 = Clock::now();
std::cout << t2-t1 << '\n';
}
Ejemplo de salida:
74 nanoseconds
"chrono_io" es una extensión para aliviar los problemas de E/S con estos nuevos tipos y está disponible gratuitamente here.
También hay una implementación de <chrono>
disponible en boost (aún puede estar en tip-of-trunk, no estoy seguro de que haya sido liberado).
Intenté ejecutar la función now() durante 300 millones de veces y hay alrededor de 100 veces que la latencia/diferencia de t1 y t2 es mayor que 10 microsegundos. ¿Es por cambio de contexto u otra cosa?Gracias – user1687035
@ user1687035: el cambio de contexto es probablemente un culpable. Depende de qué plataforma, qué compilador (incluso la versión del compilador), qué otros procesos hay en la máquina, etc. Una computadora de propósito general no es un gran reloj, a menos que constantemente pregunte a otras computadoras qué hora es. ;-) En macOS obtengo tiempos bastante sólidos * a menos que * la máquina del tiempo haga una copia de seguridad, el reflector se está indexando o el correo se está recuperando. –
- 1. ¿Cuál es el detector de codificación más preciso?
- 2. ¿Cuál es la mejor manera de implementar un "temporizador"?
- 3. ¿Cuál es el tipo de datos mejor y más preciso para almacenar la longitud de latitud en iphone xcode?
- 4. ¿Cuál es el más utilizado? RSS o Atom? y de cuál es mejor construir?
- 5. ¿Es preciso libsvm?
- 6. Cuál es mejor usar y por qué en C#
- 7. ¿Cómo creo un evento de temporizador preciso en Objective-C/iOS?
- 8. ¿Cuál es el mejor algoritmo para la palabra más cercana
- 9. ¿Qué tan preciso es el GPS en el iPhone 4?
- 10. ¿Cuál es el método más preciso para estimar el requisito de ancho de banda máximo para una aplicación web?
- 11. ¿Cuál es el marco de registro más utilizado en C#?
- 12. ¿Cuál es el tipo de ID más común en las bases de datos de SQL Server, y cuál es mejor?
- 13. ¿El 'temporizador' requiere más potencia de CPU?
- 14. ¿Cuán preciso es el reloj GPS?
- 15. ¿Cuál es el IDE de PHP más rápido y mejor en Windows?
- 16. ¿Cuál es la mejor biblioteca de cifrado en C/C++?
- 17. ¿Cuál es el mejor enfoque para generalizar y agregar volcados de XML en C#?
- 18. ¿Cuál es el mejor tutorial para aprender MPI para C++?
- 19. ¿Cuál es el mejor conversor de C# a VB.net?
- 20. ¿Qué tan preciso es el iPhone GPS (en radio)?
- 21. ¿Cuál es el mejor motor 3D Actionscript3?
- 22. La mejor manera de hacer un temporizador en UNIX
- 23. ¿Cuál es la mejor manera de ir en el largo plazo: C, objetivo C o C++?
- 24. ¿Cuál es el mejor ocultador de JavaScript?
- 25. accdb vs mdb. ¿Cuál es más rápido/mejor?
- 26. ¿Cuál es el mejor y más simple programa para subir archivos ajax?
- 27. biblioteca temporizador en C
- 28. ¿Cuál es la mejor/más segura forma de reinstalar Homebrew?
- 29. Temporizador más confiable que System.Threading.Timer
- 30. ¿Cuál es el mejor y más eficiente libro para aprender JavaScript?
El mejor temporizador absoluto sería probablemente alguna llamada específica del sistema en un RTOS que se ejecuta en algún dispositivo integrado conectado a un reloj atómico. ¿Es eso lo que estás buscando, o estás dispuesto a conformarte con algo un poco menos que "el mejor y más preciso temporizador"? –
@ James y el tiempo necesario para viajar a lo largo de los cables, y para ser procesada/etc también se tiene en cuenta aproximado? (Esa oración no tenía ningún sentido ...) –
Además, un temporizador de tan alta resolución podría consumir CPU. –