Uma resposta atualizada para C ++ 11:
Use as funções sleep_for
e sleep_until
:
#include <chrono>
#include <thread>
int main() {
using namespace std::this_thread; // sleep_for, sleep_until
using namespace std::chrono; // nanoseconds, system_clock, seconds
sleep_for(nanoseconds(10));
sleep_until(system_clock::now() + seconds(1));
}
Com estas funções não há mais a necessidade de adicionar continuamente novas funções para melhor resolução: sleep
, usleep
, nanosleep
, etc. sleep_for
e sleep_until
são funções de modelo que pode aceitar valores de qualquer resolução via chrono
tipos; horas, segundos, femtossegundos, etc.
No C ++ 14, você pode simplificar ainda mais o código com os sufixos literais para nanoseconds
e seconds
:
#include <chrono>
#include <thread>
int main() {
using namespace std::this_thread; // sleep_for, sleep_until
using namespace std::chrono_literals; // ns, us, ms, s, h, etc.
using std::chrono::system_clock;
sleep_for(10ns);
sleep_until(system_clock::now() + 1s);
}
Observe que a duração real de um sono depende da implementação: você pode pedir para dormir por 10 nanossegundos, mas uma implementação pode acabar dormindo por um milissegundo em vez disso, se esse for o menor tempo possível.