select的用法

来源:互联网 发布:2014年马刺数据 编辑:程序博客网 时间:2024/05/17 00:58

应用场景:
1、阻塞监听多事件中是否有事件发生;
2、定时检测是否有事件发生;
3、定时检测非阻塞在规定时间内是否有有事件发生。
应用实例:
1、单线程同时监听套接字、I/O是否有事件发生,发生则依次判断是哪个事件,然后做相应的处理。事件较多时,会影响事件响应的实时性;
2、监听应该指定发生的时间是否在规定时间,或者可以容忍的时间里是否有事件发生,如果没有则报告异常,通常用于设备的运维;
3、非阻塞的select实时检测是否有操作命令发生,有则第一时间响应命令,在没有命令的时候才去进行下面的业务,通常用在实时性较高的环境,如工控方面。

注意事项:
1、(不管LINUX/Windows)select返后再重新调用select时一定要重新将所有集合体成员重新加入集合,否则会出现select一直返回-1的错误状态,导致程序异常(前期不知在哪里看到说Windows这方面不用关注,结果吃了大亏,在第二次调用select时,一直返回-1)就算是某些平台下不用难过关注,我觉得养成好习惯都重新处理没有坏处,且耗费的CPU资源也是完全可以忽略的。
2、(不管在Linux/Window)select的时间也要重新加载时间,因为有的平台在调用select后都会清空其中的内容,导致最终运行的结果不是自己想要的结果,不管什么平台都加上的原因与上面一样;
3、为什么要重新加载集合 和 时间值,可以细细观察select参数,除了第一个参数外,其余都是指针,所以内核就完全有可能改变其地址对应的变量值;
4、select在调用失败,或者超时时,就会清空各个参数,此时必须必须重新给 原来的参数填充值:因为不知何时会超时,何时会失败,则选择每次调用select时都选择重新填充各参数。

————————————–点点积累、力求慢慢强悍!

0 0
原创粉丝点击