概述
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调用流程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复