sleep()封装函数

    最近在做项目中,由于对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详解实例

在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

#include<stdio.h>

#include <stdlib.h>

#include <signal.h>

#include <unistd.h>

 

void sig_handler(int num)

{

    printf("\nrecvive the signal is %d\n", num);

}

 

int main()

{

    int time = 20;

 

    signal(SIGINT, sig_handler);

    printf("enter to the sleep.\n");

 

    sleep(time);  

 

    printf("sleep is over, main over.\n");

 

    exit(0);

}

从运行结果可以看出,当我按下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

/*************************************************************************

    > File Name: sleep.c

    > Author:

    > Mail:

    > Created Time: 2015年11月20日 星期五 20时38分59秒

 ************************************************************************/

 

#include<stdio.h>

#include <stdlib.h>

#include <signal.h>

#include <unistd.h>

 

void sig_handler(int num)

{

    printf("\nrecvive the signal is %d\n", num);

}

 

int main()

{

    int time = 20;

 

    signal(SIGINT, sig_handler);

    printf("enter to the sleep.\n");

    //sleep(time);

    do{

        time = sleep(time);

    }while(time > 0);

 

    printf("sleep is over, main over.\n");

 

    exit(0);

}

备注:其中recevie the signal is 2.表示该信号是中断信号;信号的具体值如下图所示:

最后是sleep函数的man手册,命令为:man 3 sleep

 

 

 

 

 

阅读更多

没有更多推荐了,返回首页