(Consulta) La función para pausar el thread principal en C++11 Standard no vale

Iniciado por Seyro97, 21 Octubre 2015, 01:25 AM

0 Miembros y 1 Visitante están viendo este tema.

Seyro97

Hola a tod@s. La cosa es que estaba experimentando con las librerías Standard 'chrono.h' y 'thread.h' de C++11, usando el compilador de VC2015 de 64 bits. El problema es que al decirle que espere un milisegundo con la función 'std::this_thread::sleep_for(std::chrono::milliseconds(1))', el programa dice que espera entre catorce y quince milisegundos.

Código (cpp) [Seleccionar]
#include <iostream>
#include <thread>
#include <chrono>
#include <windows.h>

int main() {
std::chrono::high_resolution_clock::time_point cStartTime, cEndTime;
long long lTimeElapsed;

while(true) {
cStartTime = std::chrono::high_resolution_clock::now();
//std::this_thread::sleep_for(std::chrono::milliseconds(1));
Sleep(1);
cEndTime = std::chrono::high_resolution_clock::now();

lTimeElapsed = std::chrono::duration_cast<std::chrono::milliseconds>(cEndTime - cStartTime).count();

std::cout << "Time elapsed: " << lTimeElapsed <<  "ms" << std::endl;
}

std::cout << "\nEl programa ha terminado";

std::cin.get();
return 0;
}


Nota: La función Sleep y 'std::this_thread::sleep_for(std::chrono::milliseconds(1));' dan los mismos resultados

Aquí una captura de la salida:
Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!

avesudra

Regístrate en

ivancea96

No pretendas precisión en milisegundos al contar de ese modo. Cada función tarda su tiempo además.

Céntrate en el sleep como una ayuda, no como un medidor xD

class_OpenGL

Yo he probado el código usando "std::this_thread::sleep_for(std::chrono::milliseconds(1));", y sucede algo curioso: algunas veces marca un milisegundo, pero otras veces marca entre esos 14 y 15 milisegundos... Es extraño

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL