簡體   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