讀書筆記 Win32多執行緒程式設計 1

2022-07-22 07:03:15 字數 1813 閱讀 5367

很早就想系統的看看多執行緒方面的書籍,逮到機會:)

1。多執行緒的簡單定義:使程式得以將其工作分開,獨立運作,不互相影響。

2。多執行緒的最眾所周知的應用場景:執行大量操作是,ui死掉。

3。執行緒歷史:

dos -- 單程序單執行緒,tsr實際並不是多執行緒,tsr只是可以將程式看作是系統的一部分。但是,如果格式化一張軟盤,tsr和整個dos作業系統都動彈不得。

windows3.0及之前版本為合作型多工,也就是說,乙個程式是否放開cpu資源,完全取決於自己,其它程式包括系統都無權干涉。(目前還可以使用的peekmessage(),大概就誕生於此時吧)

windowsnt 完全支援32位程式的搶先式多工,此時windows進入了乙個多執行緒多工,並具有高度安全防護性得系統,這本書便是基於windowsnt所寫。

4。 執行緒原理:單cpu的計算機可以讓人感覺好像幾個程式一起執行,其核心為context switching(應該是"上下文切換"?算了,保留英文吧)。搶先式多工,即當作業系統認為乙個執行緒執行的已經夠久了,就發出中斷,於是cpu取得當前執行緒的當前狀態,也就是把所有暫存器內容拷貝到堆疊中,再把它從堆疊拷貝到乙個context結構中,以備以後使用。然後載入等待佇列中的乙個執行緒的context。

5。核心物件:一種handle ,其指向作業系統記憶體控制項的某種東西,為了維護系統的安全性和完整性,不能直接取得和使用。與gdi物件不同,核心物件可以有1個以上的擁有者,甚至可以跨程序。核心物件保持了乙個引用計數,以記錄多少個handles引用了此物件,也記錄了哪乙個程序或者執行緒是擁有者。

6。closehandle的重要性:乙個執行緒核心物件開始時預設的引用計數為2,乙個是自己,另乙個是啟動這個執行緒的執行緒。執行緒結束可以使前者減1;而在啟動這個執行緒的執行緒**中,使用closehandle 將使得後者減1。只有引用計數被減為0,執行緒核心物件才能釋放,我們經常忘記後者。

開始乙個執行緒

handle createthread(lpsecurity_attributes lpthreadattributes,        //新執行緒的security屬性,null表示使用預設值

size_t dwstacksize,                          //  堆疊大小,0為預設值1m

lpthread_start_routine lpstartaddress,         //啟動位址,在c中可以使用函式名稱

lpvoid lpparameter,                        //傳給執行緒的引數

dword dwcreationflags,                 //執行緒開始時狀態,預設為開始時立即執行

lpdword lpthreadid                     //返回執行緒id

); 

bool closehandle(handle hobject);        //hobject為已經開啟的物件的handle。

bool getexitcodethread(handle hthread,            //執行緒物件的handle

lpdword lpexitcode     //執行緒的退出**(exit code)

); exitthread(dword dwexitcode);        //指定此執行緒的退出**(exit code) 

8。gui執行緒和worker執行緒的區別:gui執行緒負責建造視窗和處理主訊息迴圈,worker執行緒執行純粹的運算工作。由於gui執行緒負責處理訊息迴圈,因此不能被大量的運算阻塞住,否則ui將失去反應。而worker執行緒,不能產生視窗,因為只要一關聯到視窗,它就不再叫做worker執行緒了。

9。

Win32多執行緒程式設計讀書筆記

所謂控制代碼 handle 其實就是指標,指向作業系統記憶體空間中的某樣東西,為了維護系統的完整性與安全性,不允許直接取得。核心物件與gdi物件不同,核心物件由kernel32.dll管理,而gdi物件由gdi32.dll管理,另外gdi物件只有單一擁有者,不是程序就是執行緒,而核心物件可以有乙個以...

《Win32多執行緒程式設計》學習筆記 (1)

最近開始看 win32 多執行緒程式設計 感覺受益匪淺,寫出來的目的有兩個 一是想看看自己理解的程度,能否總結出作者真正想表達的內容。2是與大家共享。好了,廢話就不說那麼多了!文章開始講述了作業系統的演化,作者從早期的 ms dos1.0 版本單任務系統到 2.x的可以允許常駐程式 tsr 但是 m...

win32多執行緒程式設計

使用3個執行緒完成6個任務,工作的執行是靠呼叫sleep 來模擬,時間長度是隨機給予的,只要乙個執行緒結束,就會有另乙個執行緒被產生。taskques.cpp 定義控制台應用程式的入口點。include stdafx.h include include include define win32 le...