gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:33:04 28 4
gpt4 key购买 nike

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() 之前阻止所有信号来完成。

最佳答案

Does the C++11 standard define the behavior of std::this_thread::sleep_for for signal interrupt/signal handler?

没有。

is the behavior platform dependent?

由于未指定,所以可以。

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

What is the best approach to implement non-interuptable sleep() in Linux?

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

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

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

关于c++ - C++11 中是否为信号中断(或信号处理程序)定义了 std::this_thread::sleep_for 行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52868709/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com