文章目录
前言
使用sleep函数时,有时出现没有挂起达到预期的时间函数就返回了,导致依赖于时间顺序的功能异常.
一、sleep函数定义
sleep函数定义如下:
unsigned int sleep(unsigned int seconds);
sleep函数挂起调用线程seconds时间,单位为秒.当seconds时间到达或不可忽略的信号到达,sleep函数将返回.返回值为0或剩余未挂起的时间.
如果如下使用:
sleep(10);
可能线程还没有挂起10秒就返回了,因为这时可能有信号到达.
二、可靠的使用
如果因为信号的到达导致sleep函数返回,则返回值为剩下挂起的时间,因此可以如下使用:
int seconds = 10;
while(1)
{
seconds = sleep(seconds);
if(seconds == 0)
break;
}
如此使用可以保证挂起时间至少为10秒.