Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67144
  • 博文数量: 17
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 213
  • 用 户 组: 普通用户
  • 注册时间: 2014-12-24 12:38
个人简介

专注的力量很大,它能把一个人的潜力发挥到极致,一旦达到那种状态你就没有了自我的概念,所有的精力集中到了一点。

文章分类
文章存档

2015年(11)

2014年(6)

我的朋友

分类: 嵌入式

2015-01-25 20:11:46

首先说说一个应用程序读取多个设备的方法,
1.利用一个whlie循环
    while(1)
    {
        read (按键);
        read (蜂鸣器);
        read (串口);
        ...
    }
    缺点:容易形成堵塞。
2.开辟多个线程
    线程1:按键
    线程2:蜂鸣器
    线程3:串口
    ...
    缺点:需要耗费相对的资源,控制起来比较麻烦。
3.今天的主角,select
    select 多路监听
    说白了就是可以调用select函数来监听多个设备。

举个很形象例子,比如说我生活在一个小区,小区里有10户人家(就好比10个设备),假如我聘请一位保安(一个线程)。这个保安需要去每户人家巡逻,那比如说现在有一个小偷,当保安去第一户人家的时候,小偷去第10户人家偷东西。保安去第二户人家的时候,小偷去第一家。这个保安不能同时去十户人家巡逻,当然这个方法不能行。那么我可以采用聘请十位保安的方法,每个保安巡逻一户人家(开辟十个线程),虽然这样安全了,但是我得出那么多钱去雇用保安呀。于是,我就想了一个办法,在这个小区里安装摄像头(select),我就雇用一个保安(一个线程),就坐在监控室里。假如说看到有小偷的时候,这个保安不会自己去抓他,为什么呢?假如这个保安这时候去抓他,那么监控室里就没有人了,那第二个小偷来怎么办?所以,保安只会通知110,select函数也是如此,当有设备进行操作的时候,不是由select来处理,而是交给别的函数去执行,select只做监听任务。好比保安坐在监控室里一个道理。
    


阅读(1573) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~