Android 中 C++ Thread线程用法

来源:互联网 发布:大数据的前沿技术培训 编辑:程序博客网 时间:2024/06/05 15:11

转自:http://blog.csdn.net/u010164190/article/details/52625423

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<MainThreadmMainThread;
  
};



原创粉丝点击