c – boost :: thread_sleep vs boost :: chrono :: thread_clock不一致

c – boost :: thread_sleep vs boost :: chrono :: thread_clock不一致,第1张

概述当我运行此代码时 #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() { 当我运行此代码时

#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 microsecduration = 121 microsecduration = 110 microsecduration = 114 microsec

此外,当我用不同的值(例如200)替换500时,输出始终大约为100.使用-O3进行编译.为什么时机不一致?

PS:我读到睡眠已被弃用,但是当我用它替换它时

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 vs boost :: chrono :: thread_clock不一致全部内容,希望文章能够帮你解决c – boost :: thread_sleep vs boost :: chrono :: thread_clock不一致所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1225102.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存