sleep()
中unistd.h
的行为在Linux http://man7.org/linux/man-pages/man3/sleep.3.html中得到了很好的定义。
问题:
C ++ 11标准是否为信号中断/信号处理程序定义了std::this_thread::sleep_for
的行为?
如果是,则行为平台是否相关? (我希望不是)
在Linux中实现不可互斥的sleep()
的最佳方法是什么?根据我的知识,可以通过在调用sleep()
之前阻塞所有信号来完成此操作。
答案 0 :(得分:2)
C ++ 11标准是否为信号中断/信号处理程序定义了std :: this_thread :: sleep_for的行为?
否。
行为平台依赖吗?
由于未指定,因此可以。
我在linux上进行了测试,并且有信号确实过早中断了睡眠。
在Linux中实现不可互斥的sleep()的最佳方法是什么?
最佳做法是不需要不间断的sleep
。 sleep
返回中断时的睡眠时间,因此,为了防止过早唤醒,您可以使用循环简单地在中断后恢复睡眠:
int time = 10;
while(time = sleep(time));
不幸的是,this_thread::sleep_for
并非如此,它不会返回中断后剩余的时间。