繁体   English   中英

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

[英]Is std::this_thread::sleep_for behaviour defined for signal interupt ( or signal handler) in C++11?

unistd.hsleep()的行为在Linux http://man7.org/linux/man-pages/man3/sleep.3.html中有明确定义。

问题:

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

  2. 在Linux中实现非中断sleep()的最佳方法是什么? 根据我的知识,这可以通过在调用sleep()之前阻塞所有信号来完成。

C ++ 11标准是否为信号中断/信号处理程序定义了std :: this_thread :: sleep_for的行为?

没有。

行为平台依赖?

由于它未指定,它可以。

我在linux上测试过,一个信号确实过早地中断了睡眠。

在Linux中实现非中断sleep()的最佳方法是什么?

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

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

不幸的是,这不是this_thread::sleep_for的情况,它不会返回中断时剩下的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM