本文主要是介绍关于linux信号对sleep的影响与相关对策,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
关于linux信号对sleep的影响
首先想说用sleep来定时是不靠谱的
简单记录一下
当前有个功能,底层传递一个信号上来,然后linux应用会调用相关的中断处理函数。但是每次触发了信号,主程序里面sleep函数就直接退出了。主程序就乱了。
那么首先想的是为什么sleep会退出?
NAME top
sleep - sleep for a specified number of seconds
SYNOPSIS top
#include <unistd.h>
unsigned int sleep(unsigned int seconds);
DESCRIPTION top
sleep() causes the calling thread to sleep either until the number of
real-time seconds specified in seconds have elapsed or until a signal arrives which is not ignored.
RETURN VALUE top
Zero if the requested time has elapsed, or the number of seconds left to sleep, if the call was interrupted by a signal handler.
ATTRIBUTES top
返回值:
Zero if the requested time has elapsed, or the number of seconds left to sleep, if the call was interrupted by a signal handler.
这里说明了sleep的确是有这个机制的,只要来信号就会退出,并返回剩余值。
那么方法就有了:
只要把剩余的时间在sleep过去就好了
但是进过测试发现,这个方法不是很靠谱,应为如果我sleep了1.1s,就直接退出,那么就等于少延时了0.9s。
那就用usleep(10000000),延时10s来做。
but 看了下发现并不能正常使用,因为usleep和sleep不同,他不会返回剩余时间。0正确-1错误。
这样的话,10s就直接过去了。
最终那么就时间切片 1000次每次usleep(10000),每次就算是退出了我也不管他,退出一次也就是10ms。
最终没有解决这个问题,只是绕过了他。
如果有更好的方法请告知多谢。
这篇关于关于linux信号对sleep的影响与相关对策的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!