elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  (Consulta) La función para pausar el thread principal en C++11 Standard no vale
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (Consulta) La función para pausar el thread principal en C++11 Standard no vale  (Leído 927 veces)
Seyro97

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
(Consulta) La función para pausar el thread principal en C++11 Standard no vale
« 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:


« Última modificación: 21 Octubre 2015, 01:27 am por Seyro97 » En línea

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: (Consulta) La función para pausar el thread principal en C++11 Standard no vale
« Respuesta #1 en: 11 Noviembre 2015, 00:43 am »

Pues a mi el mismo código en GCC me da lo que debe salir 1ms


En línea

Regístrate en
ivancea96


Desconectado Desconectado

Mensajes: 3.410


ASMático


Ver Perfil WWW
Re: (Consulta) La función para pausar el thread principal en C++11 Standard no vale
« Respuesta #2 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
En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: (Consulta) La función para pausar el thread principal en C++11 Standard no vale
« Respuesta #3 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
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines