首先说说一个应用程序读取多个设备的方法,
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) |