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.
#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)
Pues a mi el mismo código en GCC me da lo que debe salir 1ms
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
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