第九章 執行緒與核心物件的同步(6)

2021-04-28 16:08:45 字數 1861 閱讀 5964

六、其他的執行緒同步函式 1

、非同步裝置

i/o

非同步裝置

i/o使得執行緒能夠啟動乙個讀操作或寫操作,但是不必等待讀操作或寫操作完成。裝置物件是可以同步的核心物件,可以呼叫

waitforsingleobject

函式傳遞檔案、套接字和通訊埠的控制代碼。當系統執行非同步

i/o時,裝置物件處於未通知狀態。一旦操作完成,系統就將物件的狀態改為已通知狀態

,該執行緒就知道操作已經完成。執行緒就可以繼續執行。 2

、dword waitforinputidle(handle hprocess, dword dwmilliseconds)

使執行緒一直等待,直到

hprocess

標識的程序在建立應用程式的第乙個視窗的執行緒中已經沒有尚未處理的輸入為止。用於父程序建立子程序,父程序的執行緒想要知道子程序何時完成初始化,唯一的辦法是等待,直到子程序不再處理任何輸入為止。 3

、msgwaitformultipleobjects

dword msgwaitformultipleobjects(dword dwcount, phandle phobjects,bool fwaitall,

dword dwmilliseconds, dword dwwakemask);

dword msgwaitformultipleobject***(dword dwcount, phandle phobjects,

dword dwmilliseconds, dword dwwakemask, dword dwflags);

主要區別在於前者允許執行緒在核心物件變成已通知狀態或視窗訊息需要排程到呼叫執行緒建立的視窗中時被排程。建立視窗和執行與使用者介面相關的任務的執行緒應調

msgwaitformultipleobject***

函式,而不該呼叫

msgwaitformultipleobjects

函式,因為後面這個函式將使執行緒的使用者介面無法對使用者作出響應。

waitfordebugevent

:wi n d o w s

將除錯支援特性內置於作業系統之中。當除錯程式啟動執行時,它將自己附加給乙個被除錯程式。該除錯程式只需閒置著,等待作業系統將與被除錯程式相關的除錯事件通知它。除錯程式通過呼叫

waitfordebugevent

函式來等待這些事件的發生:

bool waitfordebugevent(pdebug_event pde,dword dwmilliseconds);

當除錯程式呼叫該函式時,除錯程式的執行緒終止執行,系統將除錯事件已經發生的情況通知除錯程式,方法是允許呼叫的

waitfordebugevent

函式返回。

p d e

引數指向的結構在喚醒除錯程式的執行緒之前由系統填入資訊。該結構包含了關於剛剛發生的除錯事件的資訊。

singleobjectandwait

:用於在單個原子方式的操作中發出關於核心物件的通知並等待另乙個核心物件。

dword singleobjectandwait( handle hobjecttosignal, handle hobjecttowaiton,

dword dwmilliseconds, bool falertable);

hobjecttosignal

引數必須標識乙個互斥物件、信標物件或事件。

hobjecttowaiton

引數用於標識下列任何乙個核心物件:互斥物件、信標、事件、定時器、程序、執行緒、作業、控制台輸入和修改通知。

dwmilliseconds

引數指明該函式為了等待該物件變為已通知狀態,應該等待多長時間,而

falertable

標誌則指明執行緒等待時該執行緒是否應該能夠處理任何已經排隊的非同步過程呼叫。

第九章 執行緒與核心物件的同步(2)

二 事件核心物件 事件核心物件是所有的核心物件中最基本的物件。包含乙個使用計數 與所有核心物件一樣 乙個用於指明該事件是自動重置的事件還是人工重置的事件的布林值。乙個用於指明該事件處於已通知狀態還是未通知狀態的布林值。事件核心物件的型別 人工重置的事件核心物件,事件得到通知時,等待該事件的所有執行緒...

第九章 執行緒與核心物件的同步(1)

程序核心物件,是乙個 booble 值,程序執行的時候核心物件處於未通知狀態 false 當程序終止的時候處於已通知狀態 true 當執行緒等待的核心物件處於未通知狀態時,執行緒不可排程。當核心物件變為已通知狀態時執行緒立即變為可排程狀態並投入執行。可處於已通知態和為通知態的內和物件 程序 執行緒 ...

第九章 執行緒與核心物件的同步(2)

二 事件核心物件 事件核心物件是所有的核心物件中最基本的物件。包含乙個使用計數 與所有核心物件一樣 乙個用於指明該事件是自動重置的事件還是人工重置的事件的布林值。乙個用於指明該事件處於已通知狀態還是未通知狀態的布林值。事件核心物件的型別 人工重置的事件核心物件,事件得到通知時,等待該事件的所有執行緒...