Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Drive for better visionThreadFebruary, 2012                         Himax Media                         Solutions         ...
Thread 概述           功能:打開一個新的 thread ,執行指定的 function           Thread 有繼承 RefBase ,所以可以使用            sp<Thread>,wp<Threa...
Thread::Thread(bool canCallJava)             功能                   初始化 Thread 內部變數             實作                   mCa...
status_t run(name, priority, stack)             功能                   呼叫 pthread library 創造 thread             參數       ...
javaThreadShell                 _threadLoop                       run       _threadLoop   run                          ret...
int _threadLoop(void* user)             功能                   執行使用者寫的 threadLoop() ,並根據傳回值判斷是否繼續執行             參數       ...
Drive for better vision
Upcoming SlideShare
Loading in …5
×

05 thread

999 views

Published on

Published in: Technology, Business
  • Be the first to comment

  • Be the first to like this

05 thread

  1. 1. Drive for better visionThreadFebruary, 2012 Himax Media Solutions 承景科技股份有限公司
  2. 2. Thread 概述  功能:打開一個新的 thread ,執行指定的 function  Thread 有繼承 RefBase ,所以可以使用 sp<Thread>,wp<Thread>  不能夠直接創造 Thread 物件,要先繼承 Thread ,並 override bool threadLoop()  使用 run() 函式後開始執行,執行次數和 threadLoop() 傳回值 有關  傳回 true 會反覆執行,直到呼叫 requestExit()  傳回 false 只會執行一次,這個 Thread 就會消失Himax Media Solutions Proprietary & Confidential 2
  3. 3. Thread::Thread(bool canCallJava)  功能  初始化 Thread 內部變數  實作  mCanCallJava = canCallJava  mThread = thread_id_t(-1)  mLock = Mutex("Thread::mLock")  mStatus = NO_ERROR  mExitPending = false  mRunning = false  mTid = -1Himax Media Solutions Proprietary & Confidential 3
  4. 4. status_t run(name, priority, stack)  功能  呼叫 pthread library 創造 thread  參數  name: 這個 thread 的名稱  priority: 執行優先權,大小為 -20 到 20  stack: 堆疊空間大小  實作  在 run(...) 的執行過程中, mLock 會上鎖以保護資料  執行後 mRunning = true ,以避免重覆執行  mCanCallJava == false 時,令 pthread 執行 _threadLoop()  mCanCallJava == true 時,令 pthread 執行 AndroidRuntime::javaThreadShell() ,這個函式會將 _threadLoop() 包裝起來,自動進行 VM attach/detachHimax Media Solutions Proprietary & Confidential 4
  5. 5. javaThreadShell _threadLoop run _threadLoop run return return value value threadLoop threadLoop mCanCallJava = trueHimax Media Solutions Proprietary & Confidential 5
  6. 6. int _threadLoop(void* user)  功能  執行使用者寫的 threadLoop() ,並根據傳回值判斷是否繼續執行  參數  user: 傳進來的就是指向 Thread 結構的指標  實作  第一次執行時,會等到 readyToRun()==NO_ERROR 才會開始  之後的執行,會呼叫 threadLoop() 並取得傳回值  當傳回 false ,或是有人呼叫 requestExit() ,則結束 Thread  結束 Thread 時,會喚醒被 Condition 擋住的地方  疑問  在 loop 後面加了兩行,應該會導致繼承 Thread 的物件被刪除 ??  strong.clear()  strong = weak.promote()Himax Media Solutions Proprietary & Confidential 6
  7. 7. Drive for better vision

×