Uaktualniona odpowiedź dla C++ 11:
Użyj sleep_for
i sleep_until
funkcje:
#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));
}
Z tych funkcji nie ma już potrzeby, aby nieustannie dodawać nowe funkcje dla lepszej rozdzielczości: sleep
, usleep
, nanosleep
, itp. sleep_for
i sleep_until
są funkcjami szablonu, które mogą akceptować wartości dowolnej rozdzielczości za pośrednictwem typów chrono
; godziny, sekundy, femtosekund itp
w C++ 14 można dodatkowo uprościć kod z dosłownych przyrostków dla nanoseconds
i 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);
}
Note, że rzeczywisty czas trwania snu zależy od implementacja: Możesz spać przez 10 nanosekund, ale implementacja może w końcu spać przez milisekundę, jeśli to najkrótsza z możliwych.
Zależy od platformy (OS) i posiadanych bibliotek. –