Windows執行緒基礎

2021-06-16 11:23:12 字數 1336 閱讀 4630

文章**自

執行緒由兩部分組成:執行緒核心物件和執行緒棧。關於核心物件請看

windows核心物件簡介。

執行緒核心物件,作業系統用執行緒核心物件來管理執行緒,作業系統還用它來存放統計資訊。

執行緒棧,用於維護執行緒執行時所需的所有函式引數和區域性變數,就是c#程式設計師常說的執行緒棧和託管堆中的執行緒棧。

我們知道程序是有惰性的,它的所有工作都是由執行緒完成的,而程序只是為執行緒提供場地,執行緒函式執行我們讓它執行的任務,最終執行緒函式將終止執行並返回,執行緒將終止執行,執行緒的記憶體將被釋放,執行緒核心物件的使用計數將減一,如果執行緒核心物件的使用計數減為0,執行緒核心物件將被銷毀。

說了這麼多,感覺有點虛,我們還是來看看建立執行緒的函式吧。

createthread(

lpsecurity_attributes lpthreadattributes,

size_t dwstacksize,

lpthread_start_routine lpstartaddress,

lpvoid lpparameter,

dword dwcreationflags,

pdword lpthreadid

);lpthreadattributes:用於設定執行緒的安全性,執行緒核心物件是否可以被程序的子程序所繼承,詳細了解我的這篇文章

windows核心物件簡介。

dwstacksize:用於設定執行緒棧的大小,預設為1mb

lpstartaddress:執行緒所執行的函式的位址

lpparameter:執行緒函式的引數

dwcreationflags:用於標識執行緒是否馬上執行

lpthreadid:執行緒id

建立執行緒。呼叫createthread時,系統會建立乙個執行緒核心物件,這個核心物件由作業系統管理,當它的使用計數為0時,會被自動銷毀。而當前程序的控制代碼表也會有一項用於紀錄執行緒核心物件,表示對它的乙個引用,同時系統會在程序的位址空間中分配一塊記憶體共執行緒棧使用。新執行緒可以訪問程序控制代碼表中的所有核心物件,核心物件由系統核心管理,而程序控制代碼表維護該程序所用到的核心物件的引用,而執行緒則通過控制代碼表中核心物件的位址引用核心物件。新執行緒還可以訪問程序的所有記憶體以及程序中所有執行緒的棧,如子執行緒可以很方便的訪問主線程的棧。還有一點需要說明的就是,執行緒核心物件建立完成之後,執行緒並不會馬上執行,因為執行緒棧的記憶體分配和初始化時要時間的,等一切就緒後程序才會開始執行。

終止執行緒。最好讓執行緒函式自動返回,而不應該強制終止執行緒函式,因為執行緒函式在返回前還要做些清理工作,如析構物件,**記憶體,讓作業系統正確釋放執行緒棧使用的記憶體,如果強制終止關閉執行緒,可能這些工作就不能正確的執行,很可能就會出現記憶體洩露。

最後想說的是,建議用_beginthreadex代替createthread建立函式。

Windows執行緒基礎

windows為什麼要支援執行緒?在計算機的早期歲月,作業系統沒有提供執行緒的概念。事實上,整個系統只執行著乙個執行執行緒,其中同時包含作業系統 和應用程式 只用乙個執行執行緒的問題在於,長時間執行的任務會阻止其他任務執行。例如,在16位windows的那些日子,列印乙個文件的應用程式很容易 凍結 ...

多執行緒之二,windows下的多執行緒 基礎

如下 thread.cpp win32執行緒庫,目前只能是演示的強度 作者 galphy 2005 6 20 推薦使用ide dev c 基於g 輕巧 include include typedef unsigned long stdcall threadfunc void class thread...

Windows執行緒庫

win32 api是windows作業系統為核心以及應用程式之間提供的介面,將核心提供的功能進行函式封裝,應用程式通過呼叫相關的函式獲得相應的系統功能。mfc是微軟基礎函式類庫,由微軟提供的,用類庫的方式將win32 api進行封裝,以類的方式開發者。handle 控制代碼是一種指向指標的指標。指標...