在使用loop 前,我是直接使用 epoll 的,后来发现 loop 封装了 epoll, 使用起来还要更方便一点。
static int event_handle(int fd, int events, void* data){
printf("==== handle === \n");
return 1;
}
int mMsgFds[2];
int main(void)
{
if ( socketpair( AF_LOCAL, SOCK_STREAM, 0, mMsgFds) < 0 ) {
ALOGE("could not create thread control socket pair: %s", strerror(errno));
}
sp<Looper> looper;
looper = new Looper(true);
looper->addFd(mMsgFds[1], 0, ALOOPER_EVENT_INPUT, event_handle, NULL);
while(1)
looper->pollOnce(1000);
looper.clear();
}
===== start a new thread to write message as below ====
char msg=0;
int ret;
write(mMsgFd,&msg,1);
注意:event_handle 如果返回 0, looper就不再 watch 此 fd 了。 要持续 watch 就返回 1
其他参考:
http://blog.youkuaiyun.com/fuyajun01/article/details/38052601
http://wangkuiwu.github.io/2014/08/26/MessageQueue/
本文详细介绍了Looper与Epoll的概念、区别及如何在多线程编程中利用它们进行高效的事件监听与处理。重点讨论了如何通过Looper封装Epoll简化事件管理,并提供了关键代码示例。
5597

被折叠的 条评论
为什么被折叠?



