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