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

本章介绍使用Curses库编写单人弹球游戏,通过sleep()实现动画效果,深入探讨了计时器、信号处理、阻塞信号以及弹球游戏的实现过程,同时涉及异步输入技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 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。


       总的来说,本章介绍了如何用计时器产生信号、对信合(不同信号、单个/多个信号)的处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值