sleep()unistd.h的行为在Linux http://man7.org/linux/man-pages/man3/sleep.3.html中得到了很好的定义。

问题:

  • C++ 11标准是否为信号中断/信号处理程序定义了std::this_thread::sleep_for的行为?
    如果是,则行为平台是否相关? (我希望不是)
  • 在Linux中实现不可互斥的sleep()的最佳方法是什么?根据我的知识,可以通过在调用sleep()之前阻塞所有信号来完成此操作。
  • 最佳答案



    没有。



    由于未指定,因此可以。

    我在Linux上进行了测试,并且信号确实过早中断了睡眠。



    最佳实践是不需要不可中断的sleepsleep返回中断时的睡眠时间,因此,为防止过早唤醒,您可以使用循环简单地在中断后恢复睡眠:

    int time = 10;
    while(time = sleep(time));
    

    不幸的是,this_thread::sleep_for并非如此,它不会返回中断后剩余的时间。

    09-11 01:58
    查看更多