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

2021-04-08 22:55:49 字數 2299 閱讀 3830

所謂控制代碼(handle),其實就是指標,指向作業系統記憶體空間中的某樣東西,為了維護系統的完整性與安全性,不允許直接取得。

核心物件與gdi物件不同,核心物件由kernel32.dll管理,而gdi物件由gdi32.dll管理,另外gdi物件只有單一擁有者,不是程序就是執行緒,而核心物件可以有乙個以上的擁有者,甚至可以跨程序。

win32中包含以下幾類核心物件:

表1 核心物件激發狀態的意義

物件說明

執行緒執行緒結束時,執行緒物件被激發,執行緒執行時,執行緒物件處於未激發狀態

程序程序結束時,程序物件被激發,進行執行時,程序物件處於未激發狀態

命令列輸入

當命令列視窗的輸入緩衝區中有資料時,命令列輸入物件處於激發狀態

event

事件物件由函式setevent(),pulseevent()和resetevent()控制

mutex

沒有任何擁有者時,互斥器物件處於激發狀態,當執行緒中的等待函式返回時,互斥器物件被該執行緒所擁有,保持未激發狀態,直到它被釋放。

semaphore

具有計數器的互斥器物件,計數器大於0時,訊號量物件被激發,等於0時處理未激發狀態。

1. waitforsingleobject()函式

dword waitforsingleobject(

handle    handle,

dword    dwmilliseconds

);引數

handle: 等待的核心物件控制代碼

dwmilliseconds: 等待的最長時間,0代表立即返回,infinite代表無限等待

返回值1.    核心物件變為激發狀態,返回wait_object_0

2.    核心物件未激發而等待時間已到,返回wait_timeout

3.    等待的互斥器未被釋放,返回wait_abandoned

4.    函式呼叫失敗,返回wait_failed

2. waitformultipleobjects()函式

dword waitformultipleobjects(

dword     ncount,

const       handle *lphanldes,

bool          bwaitall,

dword     dwmilliseconds

);引數

ncount: lphanldes所指陣列的元素個數,最大值為maximum_wait_objects

lphanles: 物件控制代碼陣列

bwaitall: 為true時,所有等待物件都被激發函式才返回,否則,任一等待物件被激發函式就返回

dwmilliseconds: 最長等待時間

返回值1.    核心物件未被激發但等待時間已到,返回值為wait_timeout

2.    bwaitall為true,返回值將是wait_object_0

3.    bwaitall為false,返回值減去wait_object_0,表示陣列中第幾個元素被激發

4.    等待的物件中有互斥器,返回值的範圍為[wait_abandoned_0, wait_abandoned_0 + ncount - 1]

3. msgwaitformultipleobjects()函式

dword msgwaitformultipleobjects(

dword         ncount,

lphandle    phandles,

bool              fwaitall,

dword         dwmilliseconds,

dword         dwwakemask

);

引數dwwakemake: 等待的使用者輸入訊息,包括qs_allinput, qs_hotkey, qs_input, qs_key, qs_mouse, qs_mousebutton, qs_mousemove, qs_paint, qs_postmessage, qs_sendmessage, qs_timer

返回值wait_object_0 + ncount,代表訊息到達

同步機制

1. critical section

臨界區用來實現「排他性占有」,適用範圍是單一程序的各執行緒之間,它是:

2. mutex

互斥器是乙個核心物件,可以在不同的程序的執行緒間實現「排他性占有」,它是

3. semaphore

訊號量用來追蹤有限的資源,它是

4. event object

5. interlocked variable

互鎖變數主要用於引用計數,它們:

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

很早就想系統的看看多執行緒方面的書籍,逮到機會 1。多執行緒的簡單定義 使程式得以將其工作分開,獨立運作,不互相影響。2。多執行緒的最眾所周知的應用場景 執行大量操作是,ui死掉。3。執行緒歷史 dos 單程序單執行緒,tsr實際並不是多執行緒,tsr只是可以將程式看作是系統的一部分。但是,如果格式...

win32多執行緒程式設計

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

Win32 多執行緒程式設計

程序和執行緒都是作業系統的概念 程序是應用程式的執行例項 每個程序是由私有的虛擬位址空間 資料和其它各種系統資源組成 程序在執行過程中建立的資源隨著程序的終止而被銷毀 所使用的系統資源在程序終止時被釋放或關閉 執行緒是程序內部的乙個執行單元 系統建立好程序後 實際上就啟動執行了該程序的主執行執行緒 ...