symbian線程和進程學習筆記

1) 多線程相比於活動對象,具有更高的運行期要求,例如,線程間上下文切換比同一個線程活動對象的切換慢一個數量級;線程需要更大的空間開銷,通常線程要有4K內核空間和8K用戶空間的程序棧;相比之下,活動對象只需要佔用C++對象的空間(通常小於1K)。
2) 使用線程和使用活動對象實現多任務的最大區別是前者是由內核搶佔執行,後者的協同多任務發生在一個線程中,並且一旦開始處理一個事件,活動對象就無法被其所在的活動調度器所搶佔(所以RunL要迅速返回,否則會阻塞主線程,即事件處理儘量簡短)。
  但仍有很多場合必須使用多線程,如下
 多媒體處理
 移植程序
 一個任務無法分割成簡短片段的任務。
 爲了保證所執行任務的連續性,比如播放聲音
這樣就可以將其在新建的線程中實現,從而可以異步運行該線程,而不會影響到應用程序對用戶接口事件的響應。
PS: symbian下訪問界面(畫圖繪屏等)必須在主線程
3) 爲了保護線程免受潛在惡意代碼的困擾,從Symbian 8.0後就不允許一個線程操縱其他線程(這也是在主線程中執行receiveThread.kill(0)導致程序退出的原因)。
4) 可在.mmp文件中作爲分離進程運行組件的主線程指定其堆尺寸的最小值和最大值
      Epocheapsize  minSize maxSize
5) 編寫多線程代碼時,不應該任意的賦予線程一個高優先級,否則它可能搶佔系統中的其他線程。
6) 所有線程默認優先級爲EPriorityNormal,當線程被創建,其被置爲掛起狀態不會開始運行,直到調用Resume()
7) 線程之間無法直接傳遞數據指針,因爲進程地址空間被加以保護而相互隔離了。
8) 每個線程都有自己的heap和stack;主程序有默認的清除棧(cleanStack),新建的線程就得手動創捷清除棧。
  9) 多線程可通過同步對象來訪問資源。通過限制或直接鎖住資源,保證在同一時刻只能有一個線程對資源寫操作,比如臨界區(Critical Sections)

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/lius1984/archive/2008/10/07/3027276.aspx

發佈了21 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章