最近在做项目中,由于对sleep() 函数及其封装函数掌握不透彻,导致本来延时10s,结果延时10ms,导致功能概论出现异常;现将linux sleep() 函数总结如下:
1. windows下sleep的参数为毫秒 ,所以sleep(1000) 代表延迟1秒;
Linux下 sleep的参数为秒,所以延迟1秒为 sleep(1);
2. 相关函数:signal, alarm
头文件:#include<stdio.h>
定义函数:unsigned int sleep(unsigned int seconds);
函数说明:sleep()会令目前的进程暂停, 直到达到参数seconds 所指定的时间, 或是被信号所中断.
返回值:若进程/线程挂起到参数所指定的时间则返回0,若有信号中断则返回剩余秒数。
如果需要更精确可以用usleep单位为微秒
线程休眠函数:void usleep(unsigned long usec);
linux下delay()函数:
原型为extern void delay(unsigned int msec); 它可以延时msec*4毫秒,也就是如果想延时一秒钟的话,可以这么用 delay(250);
综上所述:sleep,类似使当前进程睡眠,即就是将进程挂起,不再占用CPU(自动放弃CPU)。 这里sleep是为了让子进程在父进程之后执行,试想如果子进程先执行完了,父进程就会永远阻塞在waitpid函数,等待那个已经结束的子进程。
转载博客:http://www.cnblogs.com/yxk529188712/p/4982328.html
在linux编程中,定时功能,常见的是用sleep(time)函数来睡眠time秒;但是这个函数是可以被中断的,也就是说当进程在睡眠的过程中,如果被中断,那么当中断结束回来再执行该进程的时候,该进程会从sleep函数的下一条语句执行;这样的话就不会睡眠time秒了;
实例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
从运行结果可以看出,当我按下Ctrl+c发出中断的时候,被该函数捕获,当处理完该信号之后,函数直接执行sleep下面的语句;
备注:sleep(time)返回值是睡眠剩下的时间;
下面的例子是真正的睡眠time时间(不被中断影响):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
备注:其中recevie the signal is 2.表示该信号是中断信号;信号的具体值如下图所示:
最后是sleep函数的man手册,命令为:man 3 sleep