首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代码生成- usleep vs std::this_thread::sleep_for

代码生成- usleep vs std::this_thread::sleep_for
EN

Stack Overflow用户
提问于 2018-03-03 06:38:19
回答 2查看 1.7K关注 0票数 3

我正在尝试评估usleep std::this_thread::sleep_for,并看到在使用std::this_thread::sleep_for与usleep时生成的更多指令。

结果:https://godbolt.org/g/ZyCCmj

代码语言:javascript
复制
int main(int, char**)
{
    std::this_thread::sleep_for(std::chrono::milliseconds{30});
    usleep(30000);
    return 0;
}

在使用std::this_thread::sleep_for时,我看到的是< 10条关于睡眠的指令,但> 20条。

我们认为睡眠比std::this_thread::sleep_for有效得多,这是真的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-03 07:16:06

我们认为睡眠比std::this_thread::sleep_for有效得多,这是真的吗?

不是的。在上面的代码中,nanosleep(2)是一个系统调用,usleep(3)是一个库函数。usleep(3) 内部调用 nanosleep(2).因此,如果使用usleep(3),您无法在自己的程序中看到这些汇编代码,但是它们存在于库函数本身中。

然而,如果您的程序打算睡觉,也许讨论睡眠功能的性能是毫无意义的。

此外,std::this_thread::sleep_for更具有可移植性,这应该是首选。usleep()甚至在POSIX标准中被标记为过时。

票数 9
EN

Stack Overflow用户

发布于 2018-03-03 06:48:41

您可以看到,您比较了不同的函数nanosleepusleep。C++ STL之所以使用nanosleep,是因为它的API中理论上可用的时间粒度较少,只有纳秒而不是微秒。

nanosleep的另一个优点是,这两个函数都可以被中断,nanosleep将返回剩余时间,这样STL sleep_for可以在循环中重新运行nanosleep,直到剩余时间过期为止。使用usleep时,您永远不知道在发生中断时什么是实时过期的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49081422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档