Linux下的sleep函数 要用的话得包涵什么头文件啊?

Linux下的sleep函数 要用的话得包涵什么头文件啊?,第1张

Linux下的sleep函数 要用的话得需要#include <unistd.h>

sleep把进程的运行状态改为睡眠,将其从系统可执行队列去掉,这样系统就不会调度到该进程,不会分配CPU时间片,同时根据该进程的睡眠时间,将进程挂入相应的定时器队列中。

同时内核维持一个定时器队列,每一次时钟中断处理,都把当前到期的队列中的进程唤醒,加入到可运行进程队列中。 同时对所有挂入定时器队列中的进程时间值减1。

参考代码:

#include<stdio.h>

#include<unistd.h>

int main()

{     

int sec=0,

usec=0

while(1)

{

printf("sec = %d \n",++sec)

sleep(1)

printf("usec = %d \n",++usec)

usleep(1000000)

}

return  0

}

扩展资料:

在Linux下,sleep中的“s”不大写

sleep()单位为秒,usleep()里面的单位是微秒。在内核中,sleep的实现是由pause函数和alarm函数两个实现的。

特别注意在Codeblocks环境下是无法使用sleep函数的,因为在windows上Codeblocks采用mingw(Gnu在Window环境下的编译器,可以充分使用WindowsApi)作为编译器,而在stdlib.h中sleep的说明如下:_CRTIMP void __cdecl __MINGW_NOTHROW _sleep (unsigned long) __MINGW_ATTRIB_DEPRECATED可以认为mingw舍弃了sleep函数,建议用Sleep实现sleep。

参考资料来源:百度百科-Sleep函数

sleep函数:#include <unistd.h>unsigned int sleep(unsigned int seconds)此函数使调用进程被挂起,直到满足以下条件之一:1)已经过了seconds所指定的墙上时钟时间2)调用进程捕捉到一个信号并从信号处理程序返回注:由于其他系统活动,实际返回时间比所要求的会迟一些,像alarm一样。sleep的返回值:1)在上述第一种情形中,返回值是02)当由于捕捉到某个信号sleep提前返回时,返回值是未睡够的时间(所要求的时间减去实际休眠时间)看看下面的例子,猜猜sleep()的返回值是多少1 #include <stdio.h>2 #include <time.h>3 #include <signal.h>4 5 #define DIAPAUSE 30//sleep time 30s6 #define TIMEOUT 57 8 void sigalrm(int signo)9 10 int main()11 {12 struct sigaction sa13 14 sa.sa_handler = sigalrm15 sa.sa_flags = 016 sigemptyset(&sa.sa_mask)17 if(sigaction(SIGALRM, &sa, NULL) <0)18 {19 printf("sigaction error!\n")20 return21 }22 23 while(1)24 {25 printf("alarm(TIMEOUT)...\n")26 alarm(TIMEOUT)27 printf("...\n")28 printf("sleep(DIAPAUSE) == %d\n", sleep(DIAPAUSE))29 }30 31 return 032 }33 34 void sigalrm(int signo)35 {36 printf("timeout...\n")37 return38 }sleep函数的返回值是25。如果将TIMEOUT的值改为大于DIAPAUSE的值,如50的话,sleep函数在睡够了DIAPAUSE后就会返回,返回值为0。如果我们即需要alarm又需要sleep一个预订的事件怎么办?如上面的例子,我想在...后再sleep 30s然后再进入循环。这在socket通讯过程中,在设置超时的时候可能会用到。注意到alarm函数。#include <unistd.h>unsigned int alarm(unsigned int senconds)使用alarm函数可以设置一个计时器,在将来某个指定的时间该计时器会超时。当计时器超时时,产生SIGALARM信号。如果不捕捉或不忽略此信号,则其默认动作是终止调用该alarm函数的进程。每个进程只能有一个闹钟时钟,如果在调用alarm时,已经为该进程设置过闹钟时钟,而且它还没有超时,则将该闹钟时钟的余留值作为本次alarm函数调用的返回值。以前登记的闹钟时钟将被新值代替。如果有以前为进程登记的尚未超过的闹钟时钟,而且本次调用的seconds为0,则取消以前的闹钟时钟,其余留值仍作为alarm的返回值。(以上这几段话摘自《unix环境高级编程》)。所以在while循环的printf("...\n")后面添加一句alarm(0)就可以满足我的要求,即在...后再sleep 30s然后再进入循环。

linuxsleep函数不准解决办法如下:

如下面的一段程序:

应用程序:

#include <syswait.h>

usleep(n) //n微秒

Sleep(n)//n毫秒

sleep(n)//n秒

驱动程序:

#include <linux/delay.h>

mdelay(n) //milliseconds 其实现

#ifdef notdef

#define mdelay(n) (\

{unsigned long msec=(n)while (msec--) udelay(1000)})

#else,linuxsleep函数不准就可以调整为正确的了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7333621.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-04
下一篇2023-04-04

发表评论

登录后才能评论

评论列表(0条)

    保存