六、 線程

1. 線程 = 線程內核對象 + 線程棧

     線程棧用於維護線程執行時所需的所有函數參數和局部變量

2. 線程共享同一地址空間,線程共享內核對象句柄,因爲句柄表是針對每一個進程的而不是針對線程的。

3. 進程所使用的系統資源更多。其原因在於地址空間。(爲一個進程創建一個虛擬的地址空間需要大量的系統資源,系統中會發生大量的記錄活動,而這需要大量的內存)

4. 所有窗口應該由同一個線程創建

   實踐:用戶界面線程 + 受限於計算能力或IO的工作線程(永遠不創建窗口)

5. 線程函數應儘可能使用函數參數和局部變量。使用靜態變量和全局變量時,多個線程可以同時訪問這些變量。這樣可能破壞變量中保存的內容。

6. 新線程可以訪問進程內核對象的所有句柄、進程中的所有內存以及同一進程中其他所有線程的棧,這樣一來,同一個進程中的多個線程可以很容易地相互通信

7. 無窮遞歸會耗盡線程的棧

8. 一個線程有兩個用戶對象: 窗口和掛鉤。 一個線程終止時,系統會自動銷燬由線程創建或安裝的任何窗口。並卸載由線程創建或安裝的掛鉤。

9. 每個線程都有自己的一組cpu寄存器。 稱爲線程上下文(context)

上下文: 指令指針寄存器     IP

                         棧指針寄存器        SP

                         其它

10.   p52

      createthread(....   RtluserThreadStart, pvParam);

  void RtlUserThreadStart ()

{

線程函數                                                <--------------- 線程不能退出此函數,始終在其內部消亡。

       exitprocess

}


11. 使用_beginthreadex 而不是使用createThread      p161

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章