您的位置:首页 > 运维架构 > Linux

Understanding Unix/Linux Programming 笔记:chapter 7:事件驱动编程:编写一个视频游戏

2013-10-30 22:27 991 查看
Key-word: setitimer,getitimer, signal, sigaction, 计时器,信号处理

一、内容概要

本章任务:完成单人弹球游戏

先用curses库编写“hello,world”,然后用sleep()实现动画效果。

Sleep() make the calling thread sleep until secondshave elapsed or a signal arrived that is not ignored.

1、计时器

用alarm 和 pause 函数实现sleep()功能。Pause()挂起进程知道一个信号到达。Alarm设置本进程的计时器到达seconds秒后激发SIGALRM信号。

间隔计时器(interval timer)。与alarm相比,更复杂的计时功能,用getitimer, setitimer配置。Interval timer可以以更高的精度控制计时器不间断的发送SIGALRM信号。

计时器总是用来定时发送SIGALRM。

2、信号处理

Chapter 6介绍了用signal()处理信号,本章介绍了更复杂的signacton()处理信号。Signaction不仅可以指定信号处理函数,还可以指定是否阻塞某个信号的处理等。

后面的游戏代码中只用到了signal。

3、阻塞信号

专门的配置进程是否阻塞某信号的函数:sigprocmask。阻塞信号通常是为了防止数据损毁。

配置进程的阻塞信号属性可以使用signaction和sigprocmask。

Sigprocmask在后面的游戏代码中也没有用到。

4、弹球游戏

用interval timer不间断差生SIGALRM信号,用signal处理信号,触发信号处理接口,控制弹球的位置和实现动画效果。

用while(1)循环和getchar实现对键盘输入的监控,控制弹球的速度和方向。

5、异步输入

无需用while(1)和getchar阻塞的监听键盘,而是键盘有键按下时,产生SIGIO信号。

简要介绍了实现异步输入的两种方法:文件描述块的O_ASYNC和POSIX标准的aio_read。

总的来说,本章介绍了如何用计时器产生信号、对信合(不同信号、单个/多个信号)的处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐