2011-10-30 27 views
8

Deseo realizar la operación mencionada anteriormente en milisegundos como unidad. ¿Qué biblioteca y función llamar debería preferir?Operación de suspensión en C++, plataforma: windows

Ty.

+0

La función [Sleep] (http://msdn.microsoft.com/en-us/library/ms686298%28VS.85%29.aspx)? – Praetorian

+0

¿Estás seguro de que dormir es la mejor solución? Usualmente no lo es. –

+0

Si necesita dormir unos pocos milisegundos, tenga en cuenta que sleep() puede tener una resolución de 10 ms o más –

Respuesta

5

Puede usar la función Sleep desde Win32 API.

+0

LOL. El primer primer enlace de google pero me ganaste por 45 segundos. – ksming

2

el programador de tareas de Windows tiene una granularidad muy por encima de 1 ms (generalmente, 20 ms). puede probar esto utilizando el contador de rendimiento para medir el tiempo realmente empleado en la función Sleep(). (usando QueryPerformanceFrequency() y QueryPerformanceCounter() le permite medir el tiempo hasta el nanosegundo). tenga en cuenta que Sleep(0) hace que el hilo duerma durante el período de tiempo más corto posible.

Sin embargo, puede cambiar este comportamiento utilizando timeBeginPeriod() y pasando un período de 1 ms. ahora Sleep(0) debería regresar mucho más rápido.

tenga en cuenta que esta llamada de función se realizó para reproducir secuencias multimedia con una mayor precisión. Nunca he tenido ningún problema al usar esto, pero la necesidad de un período tan rápido es bastante raro. dependiendo de lo que intente lograr, puede haber mejores formas de obtener la precisión que desea, sin recurrir a este "truco".

6

O si está utilizando Visual Studio 2010 (u otro compilador de C++ 0x cuenta) utiliza

#include <thread> 
#include <chrono> 

std::this_thread::sleep(); 

// or 
std::this_thread::sleep_for(std::chrono::milliseconds(10)); 

con los compiladores de más edad se puede tener la misma comodidad con el correspondiente Boost Libraries

No hace falta decir el principal beneficio aquí es portabilidad y la facilidad de convertir el retraso pa rameter a unidades 'humanas'.

+2

Esto no funcionará en 2010. VS 2012, sí, pero no en 2010. – OldPeculier

+2

@ OldPeculier Lo que simplemente significa que esta es ahora la respuesta generalmente aplicable, años atrás :) – sehe

Cuestiones relacionadas