![](/img/trans.png)
[英]C++11 Thread waiting behaviour: std::this_thread::yield() vs. std::this_thread::sleep_for( std::chrono::milliseconds(1) )
[英]Is std::this_thread::sleep_for behaviour defined for signal interupt ( or signal handler) in C++11?
unistd.h
中sleep()
的行为在Linux http://man7.org/linux/man-pages/man3/sleep.3.html中有明确定义。
问题:
C ++ 11标准是否为信号中断/信号处理程序定义了std::this_thread::sleep_for
的行为? 如果是,行为平台是否依赖? (我希望不是)
在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.