c++ - 是否为 C++11 中的信号中断(或信号处理程序)定义了 std::this_thread::sleep_for 行为?
问题描述
in的行为在 Linux http://man7.org/linux/man-pages/man3/sleep.3.htmlsleep()
中有很好的定义。unistd.h
问题:
C++11 标准是否定义了
std::this_thread::sleep_for
信号中断/信号处理程序的行为?如果是,行为平台是否依赖?(我希望不是)sleep()
在 Linux中实现不可中断的最佳方法是什么?据我所知,这可以通过在调用sleep()
.
解决方案
C++11 标准是否为信号中断/信号处理程序定义了 std::this_thread::sleep_for 的行为?
不。
行为平台是否依赖?
由于未指定,因此可以。
我在linux上测试过,一个信号确实过早地中断了睡眠。
在 Linux 中实现不可中断的 sleep() 的最佳方法是什么?
最佳实践是不需要不可中断的sleep
. sleep
如果中断,则返回剩余的睡眠时间,因此为了防止过早唤醒,您可以在中断后使用循环简单地恢复睡眠:
int time = 10;
while(time = sleep(time));
不幸的是,情况并非如此,this_thread::sleep_for
它不会返回中断时剩余的时间。