Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Seyro97 en 21 Octubre 2015, 01:25 AM

Título: (Consulta) La función para pausar el thread principal en C++11 Standard no vale
Publicado por: Seyro97 en 21 Octubre 2015, 01:25 AM
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:
(http://k30.kn3.net/1/D/6/9/6/8/EE7.png)
Título: Re: (Consulta) La función para pausar el thread principal en C++11 Standard no vale
Publicado por: avesudra en 11 Noviembre 2015, 00:43 AM
Pues a mi el mismo código en GCC me da lo que debe salir 1ms
Título: Re: (Consulta) La función para pausar el thread principal en C++11 Standard no vale
Publicado por: ivancea96 en 11 Noviembre 2015, 08:55 AM
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
Título: Re: (Consulta) La función para pausar el thread principal en C++11 Standard no vale
Publicado por: class_OpenGL en 11 Noviembre 2015, 16:25 PM
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