![](/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.