Una risposta aggiornata per C ++ 11:
Usa le funzioni sleep_for
e sleep_until
:
#include <chrono>
#include <thread>
int main() {
using namespace std::this_thread;
using namespace std::chrono;
sleep_for(nanoseconds(10));
sleep_until(system_clock::now() + seconds(1));
}
Con queste funzioni non c'è più la necessità di aggiungere continuamente nuove funzioni per una migliore risoluzione: sleep
, usleep
, nanosleep
, ecc sleep_for
e sleep_until
sono funzioni template che possono accettare i valori di qualsiasi risoluzione tramite chrono
i tipi; ore, secondi, femtosecondi, ecc.
In C ++ 14 puoi semplificare ulteriormente il codice con i suffissi letterali per nanoseconds
e seconds
:
#include <chrono>
#include <thread>
int main() {
using namespace std::this_thread;
using namespace std::chrono_literals;
using std::chrono::system_clock;
sleep_for(10ns);
sleep_until(system_clock::now() + 1s);
}
Nota che la durata effettiva di una sospensione dipende dall'implementazione: puoi chiedere di dormire per 10 nanosecondi, ma un'implementazione potrebbe invece finire per dormire per un millisecondo, se è il più breve possibile.