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

时间:2018-03-03 06:38:19

标签: c++ c++11

我试图评估usleep vs std :: this_thread :: sleep_for并查看使用std :: this_thread :: sleep_for vs usleep时生成的更多指令。

结果在这里: https://godbolt.org/g/ZyCCmj

int main(int, char**)
{
    std::this_thread::sleep_for(std::chrono::milliseconds{30});
    usleep(30000);
    return 0;
}

我看到<使用usleep的10条说明但是> 20使用std :: this_thread :: sleep_for。

与std :: this_thread :: sleep_for相比,usleep的效率是否正确?

1 个答案:

答案 0 :(得分:6)

  

与std :: this_thread :: sleep_for相比,usleep的效率是否正确?

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

但是,如果您的程序打算睡觉,那么讨论睡眠功能的表现可能毫无意义。

此外,std::this_thread::sleep_for更便携,应该首选。在POSIX standard中,usleep()甚至被标记为已过时。