我是靠谱客的博主 畅快百合,最近开发中收集的这篇文章主要介绍startThreadPool调用流程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

ProcessState::self()->startThreadPool();

1、startThreadPool()的主要作用是:(ProcessState.cpp)
调用spawnPooledThread(  true )

2、spawnPooledThread这个函数里面主要作用是:(ProcessState.cpp)
启动一个线程sp<Thread> t =  new  PoolThread(isMain);
t->run(buf);        //最终就会执行PoolThread类的threadLoop函数了。

3、PoolThread继承自Thread,里面有个run函数,主要作用是:(systemcorelibutilsThreads.cpp)
调用函数createThreadEtc 或 androidCreateRawThreadEtc 创建线程_threadLoop

4、_threadLoop里面主要作用是:(systemcorelibutilsThreads.cpp)
调用自己的threadLoop(self->threadLoop()),就是2步骤中的PoolThread里面的一个函数threadLoop()

5、threadLoop()函数里面主要作用是:(ProcessState.cpp)
调用IPCThreadState::self()->joinThreadPool(mIsMain),mIsMain第一次是true,代表主线程

6、用户线程被创建后,调用joinThreadPool:
IPCThreadState::self()->joinThreadPool(mIsMain)

joinThreadPool函数主要作用是:(IPCThreadState.cpp)
调用talkWithDriver(),其中会调用ioctl(mProcess->mDriverFD, BINDER_WRITE_READ, &bwr)
驱动里面会调用wait_event_interruptible,等带客户端请求。

退出循环:
if  (result == TIMED_OUT && !isMain) {
      break ;
}
循环结束条件是TIMED_OUT,或者不是主线程,或者如下:
while  (result != -ECONNREFUSED && result != -EBADF)
————————————————
 

最后

以上就是畅快百合为你收集整理的startThreadPool调用流程的全部内容,希望文章能够帮你解决startThreadPool调用流程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(85)

评论列表共有 0 条评论

立即
投稿
返回
顶部