C++11中,std::this_thread::sleep_for对于信号中断(或信号处理程序)的行为是否定义?

4

unistd.h中的sleep()函数的行为在Linux系统下有明确定义,可以参考http://man7.org/linux/man-pages/man3/sleep.3.html.

问题:

  1. C++11标准是否定义了std::this_thread::sleep_for的信号中断/信号处理程序行为?如果是,该行为是否与平台相关?(希望不是)

  2. 在Linux系统下,实现不可中断的sleep()最佳方法是什么? 根据我的了解,这可以通过在调用sleep()之前阻止所有信号来完成。

1个回答

2
C++11标准是否定义了std::this_thread::sleep_for在信号中断/信号处理程序中的行为?
不是。
该行为是否依赖于平台?
由于未指定,因此可能会依赖于平台。
我在linux上测试过,信号确实会提前中断睡眠。
在Linux中实现不可中断的sleep()的最佳方法是什么?
最佳实践是不需要不可中断的sleep。如果被中断,则sleep返回剩余的休眠时间,因此您可以使用循环在中断后简单地恢复睡眠来防止过早唤醒:
int time = 10;
while(time = sleep(time));

不幸的是,this_thread::sleep_for 不会在中断时返回剩余时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接