等待定時器內核事件
CreateWaitableTimer(
PSECURITY_ATTRIBUTES psa,
BOOL fManualReset,
PCTSTR pszName);
進程可以獲得它自己的與進程相關的現有等待定時器的句柄。
HANDLE OpenWaitableTimer(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
PCTSTR pszName);
等待定時器對象總是在未通知狀態中創建,必須調用SetWaitableTimer函數來告訴定時器你想在何時讓
它成為已通知態。
BOOL SetWaitableTimer(
HANDLE hTimer, //定時器
const LARGE_INTEGER *pDueTime, //pDueTime和lPeriod 一道使用,用于指明定時器何時應該第一次報時
LONG lPeriod,//指明定時器應該多長時間報時一次
PTIMERAPCROUTINE pfnCompletionRoutine,
PVOID pvArgToCompletionRoutine,
BOOL fResume);
FILETIME和LARGE_INTEGER
FILETIME 從32位的邊界開始。
LARGE_INTEGER從64位邊界開始。
系統移值要考慮對齊的問題。
讓等待定時器給APC排隊。
信標內核對象
如果當前資源數量大于0,則發出信標信號。
如果當前資源數量是0,則不發出信標信號。
系統絕不允許當前資源的數量為負值。
當前資源的數量決不能大于最大資源數量。
不要把信標的使用數量與它的當前資源數量混為一談。
HANDLE CreateSemphore(
PSECURITY_ATTRIBUTE psa,
LONG lInitialCount,
LONG lMaximumCount,
PCTSTR pszName);
HANDLE OpenSemaphore(
DWORD fdwAccess,
BOOL bInHeritHandle,
PCTSTR pszName);
ReleaseSemaphore(
HANDLE hsem,
LONG lReleaseCount,
PLONG plPreviousCount)
信標能夠以原子操作方式來執行測試和設置操作。 相當于relase 使數量+1,而成功地等待信標的副作用是它的數量遞減 1
互斥對象內核對象
互斥對象包含一個使用數量,線程ID和一個遞歸計數器。
互斥對象比關鍵代碼要慢(前者是內核對象)但可以跨進程
規則:
如果線程ID是0,互斥對象不被任何線程擁有,并發出該互斥對象的通知信號。
如果ID是一個非0數字,那么一個線程就擁有互斥對象,并且不發出該互斥對象的通知信號。
與所有其他內核對象不同,互斥對象在操作系統中擁有特殊的代碼,允許它們違反正常規則。
HANDLE CreateMutex(
PSECURITY_ATTRIBUTES psa,
BOOL fInitialOwner,
PCTSTR pszName);
通過OpenMutex,另一個進程可以獲得它自己進程與現有互斥對象相關的句柄
HANDLE OpenMutex(
DWORD fdwAccess,
BOOL bInheritHandle,
PCTSTR pszName);
fInitialOwner 控制互斥對象的初始狀態,如果設為true,那么線程ID被設為調用線程ID,遞歸計數器被設1.
如果是false,線程ID和遞歸計數器都設置為0,這意味著互斥對象沒有被任何線程所擁有,因此發出它的通知信號。
通過調用一個等待函數,并傳遞一個負責保護資源的互斥對象句柄,線程就能夠獲得對共享資源的訪問權。
在內部,等待函數要檢查線程的ID,以了解它是否是0,如果線程ID是0,那么該線程ID被設置為調用線程ID,
遞歸計數設置為1,同時,調用線程保持可調度狀態。
如果等待函數發現ID不是0,那么調用線程進入等待狀態,系統將記住這個情況,并且在互斥對象的ID重
置為0時,將線程ID設置為等待線程ID,將遞歸計數器設置為1,并且允許等待線程再次成為可調度線程。
檢查和修改都是原子方式進行的。
特殊情況,一個線程試圖等待一個未通知的互斥對象,系統查看申請線程ID和互斥對象中記錄的線程ID
相同,即使互斥對象處于未通知態,系統也允許線程保持可調度狀態。遞歸計數器加1.
BOOL RelaseMutex(HANDLE hUmtex);
遞歸計數器減一,當遞歸計數器為0,線程ID重置0,同時對象變為已通知狀態。
釋放的時候也要查看線程ID是否相同。
當釋放對象之前,擁有互斥對象的線程被終止了,那么系統把該互斥對象視為已經被放棄,
重新初始化。
不同的是等待函數得到的返回值不是WAIT_OBJECT_0 而是,WAIT_ABANDONED.
?
本文轉自莫水千流博客園博客,原文鏈接:http://www.cnblogs.com/zhoug2020/p/4263760.html,如需轉載請自行聯系原作者