C++中的Sleep函数分析
linux下的sleep函数原型为: unsigned int sleep(unsigned int seconds);而MFC中的Sleep函数原型为: void Sleep(DWORD dwMilliseconds);也就是说,Linux下(使用的gcc的库),sleep()函数是以秒为单位的,sleep(1);就是休眠1秒。
·
linux下的sleep函数原型为:
unsigned int sleep(unsigned int seconds);
而MFC中的Sleep函数原型为:
void Sleep(DWORD dwMilliseconds);
也就是说,Linux下(使用的gcc的库),sleep()函数是以秒为单位的,sleep(1);就是休眠1秒。而MFC下的sleep()函数是以微秒为单位的,sleep(1000);才是休眠1秒。原来如此啊。而如果在Linux下也用微妙为单位休眠,可以使用线程休眠函数:void usleep(unsigned long usec);当然,使用的时候别忘记#include <system.h>哦。
另外值得一提的是,linux下还有个delay()函数,原型为extern void delay(unsigned int msec);它可以延时msec*4毫秒,也就是如果想延时一秒钟的话,可以这么用 delay(250);
自己也可以写一个sleep函数.
#include <time.h>
void sleep(int n)
{
int st = clock();
while ((clock() - st) <= n)
;
}
在linux下的C语言编程中,sleep函数可以方便地使进程按休眠一定的秒数,到了点后再自动恢复运行。然而sleep函数也是有几个过程组合而成的,其中就包括了对于linux信号的应用。
我将全文分为4个部分:
工作原理
设定要睡的秒数、起床
睡觉的实现
示例程序及注释
工作原理
a) 设定要睡的秒数
b) 睡觉
c) 到点起床
设定要睡的秒数、起床
每个进程都有一个私有闹钟,可以通过 alarm(秒数) 函数设定闹钟,到点时,私有闹钟会发送信号SIGALRM给进程。如果没有绑定自定义处理函数的话,默认的操作是杀死进程。显然在sleep函数的实现中,安排了一个自定义函数,且这个函数没有内容,只是防止进程关闭而已。
睡觉的实现
pause()函数可以挂起进程。
示例程序及注释
在这个程序中,模仿了sleep函数的实现,并实现了定时4秒。程序效果如下:
#include<stdio.h>
#include<signal.h>
#define SHHHH
main()
{
//声明信号处理函数
void wakeup(int);
//本程序设定睡眠时间4秒
printf("about to sleep for 4 seconds\n");
//将信号SIGALRM与处理函数wakeup绑定
signal(SIGALRM,wakeup);
//调用私有闹钟定时4秒
alarm(4);
//将进程挂起,坐等到点
pause();
//只有到了点,调用了wakeup(因为我们定义了SHHHH)
//所以wakeup没有显示,但程序恢复运行
//从pause()处往下运行
printf("Morning so soon?\n");
}
void wakeup(int signum)
{
#ifndef SHHHH
printf("Alarm received from kernel\n");
#endif
}
更多推荐
已为社区贡献4条内容
所有评论(0)