Foro de elhacker.net

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
  1. #include <iostream>
  2. #include <thread>
  3. #include <chrono>
  4. #include <windows.h>
  5.  
  6. int main() {
  7. std::chrono::high_resolution_clock::time_point cStartTime, cEndTime;
  8. long long lTimeElapsed;
  9.  
  10. while(true) {
  11. cStartTime = std::chrono::high_resolution_clock::now();
  12. //std::this_thread::sleep_for(std::chrono::milliseconds(1));
  13. Sleep(1);
  14. cEndTime = std::chrono::high_resolution_clock::now();
  15.  
  16. lTimeElapsed = std::chrono::duration_cast<std::chrono::milliseconds>(cEndTime - cStartTime).count();
  17.  
  18. std::cout << "Time elapsed: " << lTimeElapsed <<  "ms" << std::endl;
  19. }
  20.  
  21. std::cout << "\nEl programa ha terminado";
  22.  
  23. std::cin.get();
  24. return 0;
  25. }

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