信号之sleep函数
- #include <unistd.h>
- unsigned int sleep(unsigned int seconds);
- 返回值:0或未休眠够的秒数
此函数使调用进程被挂起,直到满足以下条件之一:
(1)已经过了seconds所指定的墙上时钟时间。
(2)调用进程捕捉到一个信号并从信号处理程序返回。
如果alarm信号一样,由于其他系统活动,实际返回时间比所要求的会迟一些。
在第(1)种情形中,返回值是0。当由于捕捉到某个信号,sleep提早返回时(第(2)种情形),返回值是未睡够的秒数(所要求的时间减去实际休眠的时间)。
尽管sleep可以用alarm函数(http://www.cnblogs.com/nufangrensheng/p/3515013.html)实现,但这并不是必需的。如果使用alarm,则这两个函数之间可能会交互作用。
程序清单10-21 sleep的可靠实现
- #include "apue.h"
- static void
- sig_alrm(int signo)
- {
- /* nothing to do, just returning wakes up sigsuspend() */
- }
- unsigned int
- sleep(unsigned int nsecs)
- {
- struct sigaction newact, oldact;
- sigset_t newmask, oldmask, suspmask;
- unsigned int unslept;
- /* set our handler, save previous information */
- newact.sa_handler = sig_alrm;
- sigemptyset(&newact.sa_mask);
- newact.sa_flags = 0;
- sigaction(SIGALRM, &newact, &oldact);
- /* block SIGALRM and save current signal mask */
- sigemptyset(&newmask);
- sigaddset(&newmask, SIGALRM);
- sigprocmask(SIG_BLOCK, &newmask, &oldmask);
- alarm(nsecs);
- suspmask = oldmask;
- sigdelset(&suspmask, SIGALRM); /* make sure SIGALRM isn't blocked */
- sigsuspend(&suspmask); /* wait for any signal to be caught */
- /* some signal has been caught, SIGALRM is now blocked */
- unslept = alarm(0);
- sigaction(SIGALRM, &oldact, NULL); /* reset previous action */
- /* reset signal mask, which unblocks SIGALRM */
- sigprocmask(SIG_SETMASK, &oldmask, NULL);
- return(unslept);
- }
本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/。
信号之sleep函数的更多相关文章
- Qt之自定义信号和槽函数
自定义信号和槽函数: 1.类的声明和实现分别放在.h和.cpp文件中: 2.类声明包含Q_OBJECT宏: 3.信号只要声明不要设计其的实现函数 4.发射信号用emit关键字 5.自定义槽的实现与普通 ...
- 信号之sigsuspend函数
更改进程的信号屏蔽字可以阻塞所选择的信号,或解除对它们的阻塞.使用这种技术可以保护不希望由信号中断的代码临界区.如果希望对一个信号解除阻塞,然后pause等待以前被阻塞的信号发生,则又将如何呢?假定信 ...
- qt的信号与槽函数
关联: bool connect ( const?QObject?*?sender, const?char?*?signal, const QObject * receiver, const char ...
- Linux 信号signal处理函数
转自:http://www.cnblogs.com/taobataoma/archive/2007/08/30/875662.html alarm(设置信号传送闹钟) 相关函数 signal,slee ...
- 【QT】无需写connect代码关联信号和槽函数
对于一些简单的事件判别,如点击按钮. 无需写代码关联信号和槽函数. connect(ui->Btnshowhello,SIGNAL(clicked(bool)),this,SLOT(Btnsho ...
- Linux 信号signal处理函数--转
alarm(设置信号传送闹钟)相关函数 signal,sleep 表头文件 #include<unistd.h> 定义函数 unsigned int alarm(unsigned int ...
- QT+信号和槽函数_自定义槽函数_一个信号对应多个槽函数
以下的代码里面有自定义槽函数的内容,同时也有信号实现的函数: #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QWidget> #i ...
- 想在子线程里面触发的信号的槽函数在子线程执行,信号槽连接必须使用DirectConnection 方式(即使跨线程,也可以强迫DirectConnection,而不能是AutoConnection)
Qt多线程的实现 1.继承QThread,重新run 2.继承Object,调用moveToThread方法 两种方法各有利弊:主要参考:http://blog.51cto.com/9291927/1 ...
- QT信号和槽函数学习笔记
//connect 函数有4个参数 分别是 发送者 信号.接受者 ,槽 //connect(sender,signal,receiver,slot) /* * 信号和槽 * 信号 就是一个普通的函数 ...
- Linux系统编程—信号集操作函数
先来回顾一下未决信号集是怎么回事. 信号从产生到抵达目的地,叫作信号递达.而信号从产生到递达的中间状态,叫作信号的未决状态.产生未决状态的原因有可能是信号受到阻塞了,也就是信号屏蔽字(或称阻塞信号集, ...
随机推荐
- IOS UINavigationController 操作相关集合
1.修改中间Title字体以及大小 [self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dict ...
- (一)使用Blender导出GameMaker支持的模型脚本
源于YOYO论坛帖子:http://gmc.yoyogames.com/index.php?showtopic=603723 既然想做3D,那就先从模型的导入开始,具体的源文件,可以在“(二)使用等高 ...
- CSS基础知识—【结构、层叠、视觉格式化】
结构和层叠 选择器的优先级顺序: style[内联元素]选择器>Id选择器>类选择器 属性选择器>元素选择器>通配器选择器 重要性:@important 有这个标记的属性值,优 ...
- 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇04:碰撞检测》
4.碰撞检测 碰撞概述: 游戏世界里,游戏对象不能做出如同在真实世界里的物理运动效果.对于大部分游戏来说,都要为其添加物理系统,让其可以模拟真实世界发生的物理运动.但是在这个打飞机游戏Demo中,是用 ...
- 1分钟内检查Linux服务器性能的10条命令
如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?Netflix性能工程团队的Brendan Gregg写下了这篇博文,来看他们是怎样通过十条命 ...
- HDU 5805 NanoApe Loves Sequence (模拟)
NanoApe Loves Sequence 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5805 Description NanoApe, the ...
- HDU 1150 Machine Schedule (二分图最小点覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1150 有两个机器a和b,分别有n个模式和m个模式.下面有k个任务,每个任务需要a的一个模式或者b的一个 ...
- CodeForces 707C Pythagorean Triples (数论)
题意:给定一个数n,问你其他两边,能够组成直角三角形. 析:这是一个数论题. 如果 n 是奇数,那么那两边就是 (n*n-1)/2 和 (n*n+1)/2. 如果 n 是偶数,那么那两边就是 (n/2 ...
- SQL Server中使用convert进行日期转换
使用 CONVERT: CONVERT (data_type[(length)],expression[,style]) 参数 expression 是任何有效的 Microsoft® SQL Ser ...
- Mysql中关于 group_concat函数详解
group_concat()主要功能:能将相同的行组合起来 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Sepa ...