簡單說說android的線程封裝

來源:互聯網
上載者:User

 簡單寫一下android


線程


的c++封裝~~~其實API已經寫得很清楚了~~

封裝


檔案


:/frameworks/base/include/utils/threads.h

這裡不討論具體實現,具體實現是和系統


相關聯的~~首先Anroid提供了幾個與直接建立線程的函數:
inline bool createThread(thread_func_t f, void *a)  

inline bool createThreadEtc(thread_func_t entryFunction,
                            void *userData,
                            const char* threadName = "android:unnamed_thread",
                            int32_t threadPriority = PRIORITY_DEFAULT,
                            size_t threadStackSize = 0,
                            thread_id_t *threadId = 0)

inline thread_id_t getThreadId()

下面看看Android的mutex,基本和posix的mutex很像,唯一增加了一個Mutex::Autolock,這個自動鎖用得是比較多的,在範圍裡加鎖,脫離範圍就會自動解鎖。
class Autolock {
    public:
        inline Autolock(Mutex& mutex) : mpMutex(&mutex) { mutex.lock(); }
        inline Autolock(Mutex* mutex) : mpMutex(mutex) { mutex->lock(); }
        inline ~Autolock() { mpMutex->unlock(); }
    private:
        Mutex*  mpMutex;
    };

再看看Andorid的Condition,用法基本和posix差不多,因為本身是條件變數所以只有一個mutex參數~~

最後看看android的thread類,在實際使用的過程中都是繼承這個thread類來建立自己的thread類,並定義線程的執行內容,下面主要圍繞建立自己的線程類需要實現的幾個函數說說:

class Thread : virtual public RefBase
首先它繼承自RefBase類,一般在使用的時候要實現onFirstRef()這個父類函數,一般經典


的用法是在裡面運行Thread的run函數,這樣在建立thread的執行個體


的時候就開始運行這個線程了。當然也可以不在這裡執行run()函數,在其他地方執行run()函數啟動這個線程。   

virtual status_t    run(    const char* name = 0,
                                int32_t priority = PRIORITY_DEFAULT,
                                size_t stack = 0);
建立一個thread執行個體的時候,線程並沒有運行,只有在執行run()函數的時候,線程才開始真正的開始運行。

virtual status_t    readyToRun();
這個函數定義thread執行前的初始化工作

virtual bool        threadLoop() = 0;
這個函數是每個線程類都要實現的,在這裡定義thread的執行內容,這個函數如果返回true,則函數會不停地執行threadloop中的內容,如果這個函數返回false,則threadloop中的內容僅僅執行一次線程就會退出。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.