gpt4 book ai didi

c++ - boost::thread_sleep 与 boost::chrono::thread_clock 不一致

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:21:15 26 4
gpt4 key购买 nike

当我运行这段代码时

#include <iostream>
#include <boost/thread.hpp>
#include <boost/chrono/thread_clock.hpp>

void foo() {
boost::this_thread::sleep(boost::posix_time::microseconds(500));
}


int main() {
boost::chrono::thread_clock::time_point start = boost::chrono::thread_clock::now();
foo();
boost::chrono::thread_clock::time_point stop = boost::chrono::thread_clock::now();
std::cout << "duration = "
<< boost::chrono::duration_cast<boost::chrono::microseconds>(stop-start).count()
<< " microsec\n";
}

我得到以下输出:

duration = 121 microsec
duration = 121 microsec
duration = 110 microsec
duration = 114 microsec

另外,当我用不同的值替换 500 时,例如 200,输出总是在 100 左右。使用 -O3 编译。为什么时间不一致?

PS:我读到 sleep 已被弃用,但是当我将其替换为

boost::this_thread::sleep_for(boost::chrono::microseconds(200));

输出在 ~20 微秒的范围内。

最佳答案

的确,我忽略了一些显而易见的事情。 documentation说:

thread_clock class provides access to the real thread wall-clock, i.e. the real CPU-time clock of the calling thread.

我认为 wall-time 是实际耗时,而不是不包括线程休眠时间的 cpu-time。无论如何,为了获得一致的数字,我不得不使用 boost::chrono::system_clock 代替。

关于c++ - boost::thread_sleep 与 boost::chrono::thread_clock 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45327465/

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