2009-11-01 22 views
31

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!

+6

Esto es específico de la plataforma, por lo que necesitarás OS específicos, o Boost (que hará lo anterior por ti). – GManNickG

Respuesta

3
#include "windows.h" 
Sleep(10); 

para UNIX, probablemente #include <unistd.h>

sólo Google que ...

+7

En Windows, Sleep() está en mayúscula. En Unix, hay usleep() en unistd.h – asveikau

+0

Gracias por el comentario. Escribí esto como una pista. – Dani

5

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.

+1

... 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

+0

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

+0

@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 /. El soporte debe ser provisto por la biblioteca de hilos o el sistema operativo. – Clifford

9

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() ...

68

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.

1

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>> 
10

que necesitará al menos 11 C++.

#include <thread> 
#include <chrono> 

... 

std::this_thread::sleep_for(std::chrono::milliseconds(200)); 
Cuestiones relacionadas