等待来自多个信号来源的输入
来源:互联网 发布:肛门灌啤酒 知乎 编辑:程序博客网 时间:2024/06/05 04:11
这一段很短. 它只能被拿来当成写程序时的提示, 故范例程序也很简短. 但这个范例不只能用在序列埠上, 还可以用在被当成文档来使用的装置上.
select 呼叫及伴随它所引发的巨集共用 fd_set
. fd_set
则是一个位元阵列, 而其中每一个位元代表一个有效的文档叙述结构.select
呼叫接受一个有效的文档叙述结构并传回 fd_set
位元阵列, 而该位元阵列中若有某一个位元为 1, 就表示相对映的文档叙述结构的文档发生了输入, 输出或有例外事件. 而这些巨集提供了所有处理 fd_set
的功能. 亦可参考手册 select(2).
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
main()
{
int fd1, fd2; /* 输入源 1 及 2 */
fd_set readfs; /* 文档叙述结构设定 */
int maxfd; /* 最大可用的文档叙述结构 */
int loop=1; /* 回圈在 TRUE 时成立 */
/* open_input_source 开启一个装置, 正确的设定好序列埠,
并回传回此文档叙述结构体 */
fd1 = open_input_source("/dev/ttyS1"); /* COM2 */
if (fd1<0) exit(0);
fd2 = open_input_source("/dev/ttyS2"); /* COM3 */
if (fd2<0) exit(0);
maxfd = MAX (fd1, fd2)+1; /* 测试最大位元输入 (fd) */
/* 输入回圈 */
while (loop) {
FD_SET(fd1, &readfs); /* 测试输入源 1 */
FD_SET(fd2, &readfs); /* 测试输入源 2 */
/* block until input becomes available */
select(maxfd, &readfs, NULL, NULL, NULL);
if (FD_ISSET(fd1)) /* 如果输入源 1 有信号 */
handle_input_from_source1();
if (FD_ISSET(fd2)) /* 如果输入源 2 有信号 */
handle_input_from_source2();
}
}
这个范例程序在等待输入信号出现前, 不能确定它会停顿下来. 如果你需要在输入时加入逾时功能, 只需把 select 呼叫换成:
int res;
struct timeval Timeout;
/* 设定输入回圈的逾时值 */
Timeout.tv_usec = 0; /* 毫秒 */
Timeout.tv_sec = 1; /* 秒 */
res = select(maxfd, &readfs, NULL, NULL, &Timeout);
if (res==0)
/* 文档叙述结构数在 input = 0 时, 会发生输入逾时. */
这个程序会在 1 秒钟后逾时. 如果超过时间, select 会传回 0, 但是应该留意 Timeout
的时间递减是由 select
所等待输入信号的时间为基准. 如果逾时的值是 0, select 会马上结束返回.
- 等待来自多个信号来源的输入
- OSG在同一视图中显示来自不同来源的多个模型节点文件
- 等待来自留学基金委的消息
- WaitForMultipleObjects将用于等待多个对象变为有信号状态
- mac电脑允许安装来自任何来源的应用程序
- 基本该公司的人员来源大部分来自应届生
- gridview中数据来源多个的处理方法
- 多级Activity以及多个来源Activity之间的跳转
- 输入n个整数,输出其中最小的k个——来自华为OJ平台测试基础篇
- 典型输入信号的形式
- 网页设计的11个灵感来源
- 一个servlet处理来自多个不同页面的请求!
- php接收来自命令行输入的参数
- 批处理接收来自用户输入的参数
- 多个线程共同的等待一个操作
- 并发编程--等待多个并发事件的完成
- java多线程 等待多个并发事件的完成
- 等待多个并发事件完成的模型
- OGRE 动画
- 非标准输入程序
- ogre中的材质脚本
- 非同步式输入
- Ogre材质脚本属性
- 等待来自多个信号来源的输入
- rsync 详解
- Linux 环境下使用RS-232接口
- 新的起点,新的目标,Just do it !
- Ogre 材质
- 链表的建立,输出,删除,插入运算的c语言实现
- Silverlight中使用MVVM(3)—进阶
- Ogre 让摄像机不能穿透物体
- 使用Layered Windows