android的c++类Thread , 调用run函数后,会执行一次threadLoop,还是循环执行threadLoop
时间: 2023-08-19 09:05:10 浏览: 166
在Android的C++类Thread中,调用`run()`函数后,会执行一次`threadLoop()`函数,然后退出线程。如果需要循环执行`threadLoop()`函数,需要在自定义的线程类中重写`threadLoop()`函数,并在函数中添加循环逻辑。
以下是`Thread`类中`run()`函数的部分源码:
```cpp
status_t Thread::run(const char* name, int32_t priority, size_t stack)
{
Mutex::Autolock _l(mLock);
if (mThread != 0) {
return INVALID_OPERATION;
}
mExited = false;
mNeedToExit = false;
mName = name;
mPriority = priority;
mStackSize = stack;
mRunning = true;
pthread_attr_t attr;
pthread_attr_init(&attr);
if (stack) {
pthread_attr_setstacksize(&attr, stack);
}
int result = pthread_create(&mThread, &attr, _threadLoop, this);
mSuccessfullyStartedException = (result == 0);
pthread_attr_destroy(&attr);
if (result == 0) {
while (!mHasStarted) {
mThreadExitedCondition.wait(mLock);
}
} else {
mThread = 0;
mRunning = false;
mExited = true;
mSuccessfullyStartedException = false;
}
return result;
}
```
可以看到,`run()`函数创建了一个新的线程,并调用`_threadLoop()`函数作为新线程的入口函数。在创建完线程后,`run()`函数会一直等待直到新线程成功启动,然后返回。
而在`_threadLoop()`函数中,会不断地调用用户自定义的`threadLoop()`函数,直到该函数返回为止。因此,如果需要循环执行`threadLoop()`函数,需要在自定义的线程类中重写`threadLoop()`函数并添加循环逻辑。
阅读全文