重构了MTAPI 的event loop
来源:互联网 发布:js null 与 undefined 编辑:程序博客网 时间:2024/04/25 10:22
MTAPI 创建后,一直使用基于Apple一个开源的工具库来提供跨平台封装,其中的事件循环自行改了几次,比较稳定,但是代码的确有些丑陋。
最近因为工作需要,参考了一下Android的RIL_event,很简洁的提供了一个漂亮的select event loop,还支持定时器,于是动了借鉴的念头。
google一下,原来网上已经很多开源的event loop库,有的还实现了基于epoll的异步多路IO,真是强大。。。不过用不着,我只是写一个简单的进程间通讯组件。另外,Apple开源库的事件循环Windows上的实现是基于一个隐藏的窗口,但winsock2中已经提供了select,所以本次重构时,一并修改了过来。
总结起来,实现一个基于select的异步多路IO的要点是:
- 一个线程,用于阻塞在select调用上,在读写集可用或者超时后立刻返回,检查所发生的事件
- 一对额外的PIPE描述符或者一对socket描述符,用于修改读写集后唤醒线程。windows上没有本地socket,也不支持select pipe,没关系,你google一个开源的socketpair的实现
- 一个listen端口,其套接字设置在读集中,用于accept 新连接。
- 事件发生后,直接调用与套接字相关的回调。需要的主要是,回调函数的实现需要保持高效简短,尽可能快的返回,通常具体的处理工作通知给其他线程就可以了。
- 重构了MTAPI 的event loop
- Event loop的理解
- wxWidget里面的Event Loop
- node.js的event loop
- 理解Nodejs的Event Loop
- 关于event loop的解释
- JavaScript的 Event Loop 模型
- event loop到底做了什么
- Event Loop
- Event Loop
- Event Loop
- Event Loop
- Event loop
- Event Loop
- event loop
- 固定frame rate的windows-event-loop
- 对Nodejs event loop的理解
- 对NodeJs event loop最好的理解
- 帮你弄清引用和指针相同点与区别
- PXA3xx 的一些缩略词
- VC++学习建议
- C++经典书籍解读
- "谁养鱼"(爱因斯坦所出的一道推理题)
- 重构了MTAPI 的event loop
- 看到的一份不错的介绍“堆和栈的区别”的资料 [转]
- 把FleaPHP的组件搬进cakePHP中
- 在企业中管理Mac的恶梦
- CListCtrl大数据显示
- 如果有一天我不再烦你,你会想我吗?
- VB6 与 .NET 联合
- 静态网页动态化遇到的问题
- org.hibernate.NonUniqueResultException