Necesito una función como Sleep(time);
que pause el programa durante X milisegundos, pero en C++.Función de suspensión en C++
Escriba el encabezado para agregar y la firma de la función. ¡Gracias!
Necesito una función como Sleep(time);
que pause el programa durante X milisegundos, pero en C++.Función de suspensión en C++
Escriba el encabezado para agregar y la firma de la función. ¡Gracias!
No hay manera portátil para hacer esto.
Una forma portátil es usar la biblioteca Boost o Ace. Hay ACE_OS :: sleep(); en ACE.
... y la (supuesta) razón por la que no existe una forma portátil de hacerlo en el estándar es porque la precisión de un reloj (la unidad de tiempo más pequeña) depende del hardware o depende del sistema operativo. No, tampoco creo que sea una razón convincente, pero ahí estamos. – wilhelmtell
No existe el hilo definido por estándar ... y desea dormir. Sleep es una funcionalidad proporcionada por OS. Puedo tener un entorno que no me proporcione esa característica. – alexkr
@wilhelmtell: Esa no es la razón en absoluto. ¿Quién está haciendo esta suposición más que tú? No hay un estándar para el soporte de subprocesos (yest), y si no hay subprocesos (o más bien solo un subproceso), no hay necesidad de un subproceso de subproceso en lugar de un simple 'espera ocupada', que se puede implementar con
en UNIX, incluyen #include <unistd.h>
... El llama a tu interesa es usleep() ... ¿Qué lleva microsegundos, por lo que debe multiplicar su valor en milisegundos antes de 1000 y pasar el resultado a usleep() ...
uso std::this_thread::sleep_for
:
std::chrono::milliseconds timespan(111605); // or whatever
std::this_thread::sleep_for(timespan);
también existe la conexión std::this_thread::sleep_until
.
Antes de C++ 11, C++ no tenía ningún concepto hilo y sin capacidad de sueño, por lo que su solución era necesariamente dependiente de la plataforma. He aquí un fragmento que define una función sleep
para Windows o Unix:
#ifdef _WIN32
#include <windows.h>
void sleep(unsigned milliseconds)
{
Sleep(milliseconds);
}
#else
#include <unistd.h>
void sleep(unsigned milliseconds)
{
usleep(milliseconds * 1000); // takes microseconds
}
#endif
Pero un pre-C++ 11 método mucho más simple es utilizar boost::this_thread::sleep
.
La forma más sencilla que encontré para C++ 11 fue la siguiente:
Tu incluye:
#include <windows.h> #include <chrono> #include <thread>
Su código (este es un ejemplo para el sueño 1.000 milisegundos):
std::chrono::duration<int, std::milli> timespan(1000); std::this_thread::sleep_for(timespan);
La duración puede ser configurada para cualquiera de los siguientes:
std::chrono::nanoseconds duration</*signed integer type of at least 64 bits*/, std::nano>
std::chrono::microseconds duration</*signed integer type of at least 55 bits*/, std::micro>
std::chrono::milliseconds duration</*signed integer type of at least 45 bits*/, std::milli>
std::chrono::seconds duration</*signed integer type of at least 35 bits*/>
std::chrono::minutes duration</*signed integer type of at least 29 bits*/, std::ratio<60>>
std::chrono::hours duration</*signed integer type of at least 23 bits*/, std::ratio<3600>>
que necesitará al menos 11 C++.
#include <thread>
#include <chrono>
...
std::this_thread::sleep_for(std::chrono::milliseconds(200));
Esto es específico de la plataforma, por lo que necesitarás OS específicos, o Boost (que hará lo anterior por ti). – GManNickG