Câu trả lời được cập nhật cho C ++ 11:
Sử dụng các chức năng sleep_for
và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
, nanosleep
vv sleep_for
và sleep_until
là 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 chrono
cá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 nanoseconds
và 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.