gpt4 book ai didi

c++ - 使用 chrono 的精确时间 sleep

转载 作者:太空狗 更新时间:2023-10-29 21:19:09 28 4
gpt4 key购买 nike

我希望我的应用程序休眠正好 2000 微秒:

#include <iostream>
#include <chrono>
#include <thread>

std::cout << "Hello waiter" << std::endl;
std::chrono::microseconds dura( 2000 );

auto start = std::chrono::system_clock::now();
std::this_thread::sleep_for( dura );
auto end = std::chrono::system_clock::now();

auto elapsed = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
std::cout << "Waited for " << elapsed.count() << " microseconds" << std::endl;

这导致

Waited for 2620 microseconds

这种差异从何而来?是否有更好(更精确)的方法可用?

谢谢!

最佳答案

引自 cppreference(参见 sleep_for):

This function may block for longer than sleep_duration due to scheduling or resource contention delays.

我认为这是最有可能的解释。详细信息将取决于您的环境,尤其是您的操作系统。

一般来说,我看不到避免它的可移植方法(不可移植的选项包括增加线程优先级或降低 nice 级别)。

导致时间差异的另一个(但不太可能)原因是外部时钟调整(例如,由 ntp 守护程序引起)。使用 steady_clock是一种防止时钟调整的可移植保险。

关于c++ - 使用 chrono 的精确时间 sleep ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28311230/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com