sleep与alarm

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 }

时间: 2024-11-30 15:29:28

sleep与alarm的相关文章

Linux下C编程:alarm

alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程.如果参数seconds 为0,则之前设置的闹钟会被取消,并将剩下的时间返回.信号正常发送时返回值为0.若新的报警设置在前一次设定尚未结束时,发送,则返回前一次设置所剩时间.返回之前闹钟的剩余秒数,如果之前未设闹钟则返回0. alarm()执行后,进程将继续执行,在后期(alarm以后)的执行过程中将会在seconds秒后收到信号SIGALRM并执行其处理函数. 使用alarm函数可以设置一个计时器,在将

汇编源码系列之alarm

这个都是过去DOS时代的汇编源码,虽然已经过去了,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言,大多人掌握即可,不一定要深入研究....... cseg segment para public 'code'org 100halarm proc far; Memory-resident program to intercept the timer interrupt and display the; system time in the upper right-hand corne

Unix编程之alarm函数详解

Unix下编程很容易遇到这个函数,我们可以先看下这个函数的介绍,用man工具,man alarm. 对于Unix系统的联机帮助中关于alarm函数的介绍如下: #include <unistd.h> unsigned int alarm(unsigned int seconds); 它的主要功能是设置信号传送闹钟.其主要功能用来设置信号SIGALRM在经过seconds指定的秒数后传送给目前的进程,如果在定时未完成的时间内再次调用了alarm函数,则后一次定时器设置将覆盖前面的设置,当seco

Android ApiDemos示例解析(20) App-&amp;gt;Alarm-&amp;gt;Alarm Service

Alarm Service和Alarm Controller 例子非常类似,只是Alarm Service是用来Schedule一个Service,而前面的例子是来 Schedule一个Broadcast. 前面说过PendingIntent ,可以来描述一个Activity ,Broadcast,或是一个Service.本例是 Schedule一个Alarm事件来启动一个Service.这通常用于来执行一个较费时的任务. 关于如果编写一个Service将在后面 的有专门的例子来说明,只里不详述

Android ApiDemos示例解析(19) App-&amp;gt;Alarm-&amp;gt;Alarm Controller

Alarm Controller演示如何在Android应用中使用Alarm事件,其功能和java.util.Timer ,TimerTask类似.但Alarm可以即使 当前应用退出后也可以做到Schedule一个任务在指定的时刻执行. AlarmManager 用于管理Alarm事件,支持单次执行或 重复执行. 和大都数Android服务一样,AlarmManager也是通过getSystemService来获取服务对象: AlarmManager am = (AlarmManager)get

android-使用 alarm manager 如何设置闹钟

问题描述 使用 alarm manager 如何设置闹钟 我试着在星期一的时候设置一个闹铃,但是没起作用,如何在周一设置一个闹铃,并且只响一次呢? if (chk_wednesday.isChecked()) { weekday = 7 - calNow.get(Calendar.DAY_OF_WEEK); calSet.add(Calendar.DATE weekday); forday(weekday); }public void forday(int week) { days = calN

wake-up signal SIGALRM from alarm() or setitimer(). SIG_DFL &amp; SIG_IGN

SIGALRM信号, 一般可以由alarm或者setitmer来发出. 可以用于定多长时间触发一个事件. 例如在等待用户输入时, 超过多少秒就触发这个信号. 在触发后, 用户输入被中断, 跳转到信号处理函数, 信号处理函数结束后, 接着用户输入的下一个语句执行, 用户输入不再执行. 如下 : [root@db-172-16-3-150 zzz]# cat a.c #include <stdio.h> #include <unistd.h> #include <signal.h

Android源码分析-Alarm机制与Binder的交互

转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/18448997 前言 本次给大家分析的是Android中Alarm的机制以及它和Binder的交互,所用源码为最新的Android4.4.因为Alarm的功能都是通过Binder来完成的,所以,介绍Alarm之前必须要先介绍下它是如何调用Binder来完成定时功能的.由于内容较多,本文会比较长,在文章结构安排上是这样的:首先简单介绍如何使用Alarm并给出其工作原理,接着分析

UC编程8-信号发送函数kill/raise/setitimer/alarm和信号集函数segprocmask

//myuc.h #include<stdio.h>//io流 #include<stdlib.h>//标准库 #include<unistd.h>//uc标准头文件 #include<fcntl.h>//文件控制 #include<string.h>//c字符串 #include<sys/types.h> #include<sys/mman.h>//内存映射 #include<sys/stat.h>//文件状