本文主要是介绍Android 中 C++ Thread线程用法(五十七),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、Android把线程C++封装Thread类,它是线程的基类
2、使用Thread时,创建一个类继承于Thread类,实现threadLoop()方法是纯虚函数,在子类中实现
3、启动线程,调用run()函数
class Thread : virtual public RefBase//RefBase封装sp、wp智能指针
{
public:
Thread(bool canCallJava = true);
virtual ~Thread();
// 启动线程,创建一个新的线程并执行threadLoop()虚函数
virtual status_t run( const char* name = 0, int32_t priority = PRIORITY_DEFAULT,size_t stack = 0);
//退出线程函数(异步)
virtual void requestExit();
/*readyToRun()在Android4.4版本 system/core/libutils/Threads.cpp,
在run()函数里的_threadLoop()方法被调用self->readyToRun();初始化线程,
之后调用result = self->threadLoop();真正启动线程 */
// 可重载此虚函数进行初始化工作,为隐式调用
virtual status_t readyToRun();
//线程退出(同步)
status_t requestExitAndWait();
protected:
// 判断requestExit()是否被调用过
bool exitPending() const;
private:
// 线程函数。若此函数返回true,当requestExit()没被调用过时会再次调用此函数;若返回false,
在该函数返回时线程将退出
virtual bool threadLoop() = 0;//纯虚函数,在子类中实现
};
举例:
Thread类继承于ReBase虛基类,new一个sp的模板类,会最终调用该类对象对Refbase重载的onFirstRef();
例如: sp<MainThread> mMainThread; //成员变量;智能指针sp<char> == char *等价
mMainThread = newMainThread();//new 一个sp的模板类赋值给成员变量mMainThread
虛基类Refbase()中的onFirstRef()方法被调用,此时run()反方发被调用,线程启动,调用threadLoop()不停循环执行。
class MainThread : public Thread {
public:
MainThread();
virtual ~MainThread();
virtual void onFirstRef()
{
run("MainThread", PRIORITY_DEFAULT);
}
virtual status_t readyToRun();
virtual bool threadLoop();
virtual void requestExit();
void requestLock();
private:
sp<MainThread> mMainThread;
};
这篇关于Android 中 C++ Thread线程用法(五十七)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!