在使用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/