Android Looper(cpp)用法举例

在使用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 = 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.csdn.net/fuyajun01/article/details/38052601
http://wangkuiwu.github.io/2014/08/26/MessageQueue/


你可能感兴趣的:(Android)