导航:首页 > 操作系统 > linuxsleep唤醒

linuxsleep唤醒

发布时间:2022-07-30 03:41:35

linux如何实现睡眠唤醒按键,使得系统睡眠唤醒

❷ linux中的sleep怎么用

sleep函数: #include <unistd.h> unsigned int sleep(unsigned int seconds); 此函数使调用进程被挂起,直到满足以下条件之一: 1)已经过了seconds所指定的墙上时钟时间 2)调用进程捕捉到一个信号并从信号处理程序返回 注:由于其他系统活动,实际返回时间比所要求的会迟一些,像alarm一样。 sleep的返回值: 1)在上述第一种情形中,返回值是0 2)当由于捕捉到某个信号sleep提前返回时,返回值是未睡够的时间(所要求的时间减去实际休眠时间) 看看下面的例子,猜猜sleep()的返回值是多少 1 #include <stdio.h> 2 #include <time.h> 3 #include <signal.h> 4 5 #define DIAPAUSE 30 //sleep time 30s 6 #define TIMEOUT 5 7 8 void sigalrm(int signo); 9 10 int main() 11 { 12 struct sigaction sa; 13 14 sa.sa_handler = sigalrm; 15 sa.sa_flags = 0; 16 sigemptyset(&sa.sa_mask); 17 if(sigaction(SIGALRM, &sa, NULL) < 0) 18 { 19 printf("sigaction error!\n"); 20 return; 21 } 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 0; 32 } 33 34 void sigalrm(int signo) 35 { 36 printf("timeout...\n"); 37 return; 38 } 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然后再进入循环。

❸ linux中如何实现sleep(0)的功能

前段时间从windows移植了一个程序到linux上,不知为何性能奇差。查了下原因,发现是由于一个函数ZeroSleep特别耗时,这个函数的代码很简单,如下:
void ZeroSleep()
{
Sleep(0);
}
Sleep(0)作用是用来释放cpu的时间片,避免忙等待。于是想当然的在linux上实现为:
void ZeroSleep()
{
msleep(0);
}
但其实msleep API的源代码如下:
void msleep(unsigned int msecs)
{
unsigned long timeout = msecs_to_jiffies(msecs) + 1;
while (timeout)
timeout = schele_timeout_uninterruptible(timeout);
}
如此一来,即使参数为0,也至少要睡眠一个jiffies单位的时间,因此导致严重的性能问题。
该问题的解决方法是:
既然ZeroSleep的目的是释放cpu资源,那么就可以通过调用schele()函数替换msleep 。而且实际上msleep本身也是通过调用schele_timeout_uninterruptible实现的,所以这个做法也是合理的。
http://tassardge.blog.163.com/blog/static/17230170820100275580656/

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

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

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

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

参考代码:

#include<stdio.h>

#include<unistd.h>

intmain()

{

int sec=0,

usec=0;

while(1)

{

printf("sec=%d ",++sec);

sleep(1);

printf("usec=%d ",++usec);

usleep(1000000);

}

return0;

}

(4)linuxsleep唤醒扩展阅读:

在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。

❺ linux的sleep函数有什么用

sleep把进程的运行状态改为睡眠,将其从系统可执行队列去掉,这样系统就不会调度到该进程,不会分配CPU时间片。同时根据该进程的睡眠时间,将进程挂入相应的定时器队列中。
同时内核维持一个定时器队列,每一次时钟中断处理,都把当前到期的队列中的进程唤醒,加入到可运行进程队列中。 同时对所有挂入定时器队列中的进程时间值减1,

[cpp] view plain
clock_t start=clock();
sleep(5);
clock_t end=clock();
float time=(float)(end-start)/CLOCKS_PER_SEC;
printf("Sleep clock:%f\n",time);
首先获取当前系统滴答数A,然后再加上需要sleep的时长结合CPU时钟频率计算得到的滴答数B。再来一个while循环,循环体中不停获取当前滴答数,大于(A+B)时跳出循环,函数返回。

❻ 请教Linux下的sleep函数

函数名: sleep、usleep
功 能: 执行挂起一段时间
头文件: #include <unistd.h>
区 别: unsigned sleep (unsigned int seconds);//n秒
int usleep (useconds_t usec);//n微秒

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

#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函数原型为:
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)。
Linux下还有个delay()函数,原型为extern void delay(unsigned int msec);它可以延时msec*4毫秒,也就是如果想延时一秒钟的话,可以这么用 delay(250)。

❼ 请问Linux的休眠和唤醒线程...

通过信号实现。 sleep函数是通过闹钟信号实现的,在不同的LINUX版本中实现有差异。

❽ 如何在Linux系统里使用sleep函数

sleep通常用在循环中让程序挂起等时间过了再继续往下执行
可以用 man 3 sleep 可以看到头文件和帮助

❾ sleep休眠怎么唤醒 linux

sleep命令 
常用工具命令 sleep命令暂停指定的时间。 
语法 
sleep(参数) 
参数 
时间:指定要暂停时间的长度。 
时间长度,后面可接 s、m、h 或 d,其中 s 为秒,m 为 分钟,h 为小时,d 为日数。 实例 有时在写一些以循环方式运行的监控脚本,设置时间间隔是必不可少的,下面是一个Shell进度条的脚本演示在脚本中生成延时。 
#!/bin/bash 
b='' for ((i=0;$i<=100;i++)) do printf "Progress:[%-100s]%d%%\r" $b $i sleep 0.1 b=#$b done

❿ linux下的sleep函数

您好,
请在printf的字串后加换行符

{printf("%d \n",i); sleep(1); }

printf是行缓冲打印,它有一个buf,buf满或遇\n,打印输出
请采纳为最佳答案,谢谢

阅读全文

与linuxsleep唤醒相关的资料

热点内容
受信任的服务器是什么意思 浏览:252
服务器地址的分析过程 浏览:957
麦当劳点餐app哪个好 浏览:585
手机网站图片压缩 浏览:172
前端程序员干嘛 浏览:564
女权主义pdf 浏览:458
阿里云服务器低价续费 浏览:337
python监控日志脚本 浏览:134
云服务器实例是什么意思 浏览:710
小寻app是做什么的 浏览:649
c语言中编译和运行 浏览:1000
画流图找循环编译原理 浏览:158
oppo手机西瓜视频的文件夹 浏览:867
骑手一般用哪个app 浏览:610
程序员老板用什么手机 浏览:848
比心app头像不通过为什么 浏览:105
加密币市值前十走势 浏览:190
单片机学习推荐课程 浏览:474
对数ln的运算法则图片 浏览:735
仿微博app源码 浏览:781