SO: Windows 7WinAPI Sleep() llamada a la función duerme durante más tiempo de lo esperado
Cuando se llama a la función API de Windows Sleep() como del sueño (1) el hilo en realidad tiene capacidad para 15 ms. Lo hice 100 veces en un bucle y el tiempo de suspensión total fue de 1500ms en vez de 100.
¿Es este comportamiento común o debería ser informado sobre algo que está mal con mi instalación de MOBO, CPU, Windows?
EDITAR: Si es posible, podría ejecutar este código y publicar cuánto tiempo durmió. Dejé que un amigo mío manejara esto, y él realmente lo tenía todo en 1ms.
#include <iostream>
#include <ctime>
#include <Windows.h>
void test(void)
{
std::cout << "Testing 1ms sleep." << std::endl;
for (unsigned int i = 0; i < 10; i++)
{
std::clock_t startClocks = std::clock();
Sleep(1);
std::clock_t clocksTaken = std::clock() - startClocks;
std::cout << "Time: " << clocksTaken << "ms." << std::endl;
}
}
int main(void)
{
test();
std::cin.sync();
std::cin.get();
return 0;
}
Edit2: Parece que la razón por qué algunas personas son cada 1ms es que algún otro programa en ejecución que establece la resolución del temporizador de todo el sistema a 1 ms. Por defecto debería ser 15.6ms en Windows 7.
Desde sueño puede fácilmente tomar un tiempo diferente en función de diversos factores (el hardware/O se está ejecutando, la carga del procesador en ese momento, etc.) No estoy seguro de lo que espera lograr pidiéndole a las personas que ejecuten ese código. Sería perfectamente posible que produzca un tiempo diferente para cada iteración del ciclo, cada vez que se ejecuta. – obmarg
No creo que Sleep() sea hardware específico en Windows. Si no está ejecutando ningún programa que use timeBeginPeriod(), entonces los resultados deberían ser de 15-16ms. Por ejemplo: Windows Media Player lo configura en 10 ms y BSPlayer en 1 ms. También se ha dicho que algunos navegadores lo ajustan. – NFRCR
Quizás no esté conectado directamente, pero aún podría haber un enlace indirecto: si está ejecutando Windows en una máquina muy poco potente, la carga aumentaría y el tiempo antes de que Sleep también pudiera volver. – obmarg