IO复用-使用NDK提供的Looper
来源:互联网 发布:淘宝新店铺 购买 编辑:程序博客网 时间:2024/06/05 09:48
android NDK提供了对linux epoll 的封装API,头文件在android/looper.h ,
其封装的实现代码在(android4.3):
android-4.3/frameworks/base/native/android/looper.cpp 和
android-4.3/frameworks/native/libs/utils/Looper.cpp
android/looper.h 中有几个比较重要的函数:
typedef int (*ALooper_callbackFunc)(int fd, int events, void* data);
回调函数类型,返回1表示继续监听fd,返回0表示将fd删除,不再监听
int ALooper_addFd(ALooper* looper, int fd, int ident, int events, ALooper_callbackFunc callback, void* data);
添加fd到looper以便可以进行监听,具体参数含义可以查看头文件
int ALooper_pollOnce(int timeoutMillis, int* outFd, int* outEvents, void** outData);开始监听addFd加进来的fd事件,用法请查看头文件
用法案例 :
int onEvent(int fd, int events, void* da){Server *sv=(Server*)da;return sv->handleEvent(fd, events, da); //分发处理事件}void Server::runLoop(){setnonblock(socket_fd); //设置为非阻塞setnonblock(broadcast_fd);looper=ALooper_prepare(0); ALooper_acquire(looper); ALooper_addFd(looper,socket_fd,0,events,(ALooper_callbackFunc)&onEvent,this); ALooper_addFd(looper,broadcast_fd,0,events,(ALooper_callbackFunc)&onEvent,this); ............ ............ pollTimeout=-1; //-1永不超时exit_flag=0;running=1;while(true){int result=ALooper_pollOnce(pollTimeout,NULL,NULL,NULL);if(result== ALOOPER_POLL_ERROR){ //发生错误break;}if(result==ALOOPER_POLL_TIMEOUT) //等待超时{doSomething();}if(exit_flag)break;}ALooper_removeFd(looper,broadcast_fd); ALooper_removeFd(looper,socket_fd); ALooper_release(looper); running=0;}
相对于libevent,libuv库,NDK提供的API功能显然弱不少,且只能为用epoll。但是它方便,易用,
不需要额外的库,在不是太复杂的系统中可以尝试使用。
0 1
- IO复用-使用NDK提供的Looper
- Looper及Looper的使用
- 【ndk】直接使用ndk提供的arm-linux-androideabi-gcc编译android可执行程序
- 关于Looper的使用
- Looper的使用
- NDK提供的共享库(Prebuilt)
- NDK提供的共享库(Prebuilt)
- NDK提供的共享库(Prebuilt)
- NDK提供的共享库(Prebuilt)
- 提供 IO 操作的工具类
- android ndk的使用
- NDK-GDB的使用
- Android NDK的使用
- Android NDK的使用
- ndk-stack的使用
- ndk-stack的使用
- ndk-stack的使用
- ndk-stack的使用
- c&c++程序优化几个建议
- ejb3persistence.jar javax.persistence的注解配置
- 虚函数
- vector和list区别【转】
- Windows phone8 获取本机 IP 地址
- IO复用-使用NDK提供的Looper
- JAVA中this用法小结
- CMSFlexGrid的用法
- SQL 2005 with(nolock)详解
- clrscr() -- 等等辅助小函数 未完
- Oracle trunc()函数的用法
- IOS-圆角矩形
- C#中SqlDataAdapter的使用小结
- KMP算法next的求法