Câu trả lời được cập nhật cho C ++ 11:
Sử dụng các chức năng sleep_forvà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));
}
Với các chức năng này có không còn là một cần thiết phải liên tục bổ sung chức năng mới cho độ phân giải tốt hơn: sleep, usleep, nanosleepvv sleep_forvà sleep_untillà hàm mẫu mà có thể chấp nhận giá trị của độ phân giải bất kỳ thông qua chronocác loại; giờ, giây, femto giây, v.v.
Trong C ++ 14, bạn có thể đơn giản hóa mã hơn nữa với các hậu tố chữ cho nanosecondsvà 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);
}
Lưu ý rằng thời lượng thực tế của một giấc ngủ phụ thuộc vào việc triển khai: Bạn có thể yêu cầu ngủ trong 10 nano giây, nhưng thay vào đó, một triển khai có thể kết thúc ngủ trong một mili giây, nếu đó là thời gian ngắn nhất mà nó có thể làm được.