第九章 线程与内核对象的同步(6)
?
六、其他的線程同步函數(shù)
1、異步設(shè)備I/O
異步設(shè)備I/O使得線程能夠啟動(dòng)一個(gè)讀操作或?qū)懖僮?#xff0c;但是不必等待讀操作或?qū)懖僮魍瓿伞TO(shè)備對(duì)象是可以同步的內(nèi)核對(duì)象,可以調(diào)用WaitForSingleObject函數(shù)傳遞文件、套接字和通信端口的句柄。當(dāng)系統(tǒng)執(zhí)行異步I/O時(shí),設(shè)備對(duì)象處于未通知狀態(tài)。一旦操作完成,系統(tǒng)就將對(duì)象的狀態(tài)改為已通知狀態(tài),該線程就知道操作已經(jīng)完成。線程就可以繼續(xù)運(yùn)行。
2、DWORD WaitForInputIdle(HANDLE hProcess, DWORD dwMilliseconds)
使線程一直等待,直到hProcess標(biāo)識(shí)的進(jìn)程在創(chuàng)建應(yīng)用程序的第一個(gè)窗口的線程中已經(jīng)沒(méi)有尚未處理的輸入為止。用于父進(jìn)程創(chuàng)建子進(jìn)程,父進(jìn)程的線程想要知道子進(jìn)程何時(shí)完成初始化,唯一的辦法是等待,直到子進(jìn)程不再處理任何輸入為止。
3、MsgWaitForMultipleObjects
DWORD MsgWaitForMultipleObjects(DWORD dwCount, PHANDLE phObjects,BOOL fWaitAll,
DWORD dwMilliseconds, DWORD dwWakeMask);
DWORD MsgWaitForMultipleObjectsEx(DWORD dwCount, PHANDLE phObjects,
DWORD dwMilliseconds, DWORD dwWakeMask, DWORD dwFlags);
主要區(qū)別在于前者允許線程在內(nèi)核對(duì)象變成已通知狀態(tài)或窗口消息需要調(diào)度到調(diào)用線程創(chuàng)建的窗口中時(shí)被調(diào)度。創(chuàng)建窗口和執(zhí)行與用戶界面相關(guān)的任務(wù)的線程應(yīng)調(diào)MsgWaitForMultipleObjectsEx函數(shù),而不該調(diào)用MsgWaitForMultipleObjects函數(shù),因?yàn)楹竺孢@個(gè)函數(shù)將使線程的用戶界面無(wú)法對(duì)用戶作出響應(yīng)。
Wi n d o w s將調(diào)試支持特性內(nèi)置于操作系統(tǒng)之中。當(dāng)調(diào)試程序啟動(dòng)運(yùn)行時(shí),它將自己附加給一個(gè)被調(diào)試程序。該調(diào)試程序只需閑置著,等待操作系統(tǒng)將與被調(diào)試程序相關(guān)的調(diào)試事件通知它。調(diào)試程序通過(guò)調(diào)用WaitForDebugEvent函數(shù)來(lái)等待這些事件的發(fā)生:
BOOL WaitForDebugEvent(PDEBUG_EVENT pde,DWORD dwMilliseconds);
當(dāng)調(diào)試程序調(diào)用該函數(shù)時(shí),調(diào)試程序的線程終止運(yùn)行,系統(tǒng)將調(diào)試事件已經(jīng)發(fā)生的情況通知調(diào)試程序,方法是允許調(diào)用的WaitForDebugEvent函數(shù)返回。p d e參數(shù)指向的結(jié)構(gòu)在喚醒調(diào)試程序的線程之前由系統(tǒng)填入信息。該結(jié)構(gòu)包含了關(guān)于剛剛發(fā)生的調(diào)試事件的信息。
用于在單個(gè)原子方式的操作中發(fā)出關(guān)于內(nèi)核對(duì)象的通知并等待另一個(gè)內(nèi)核對(duì)象。
DWORD SingleObjectAndWait( HANDLE hObjectToSignal, HANDLE hObjectToWaitOn,
DWORD dwMilliseconds, BOOL fAlertable);
hObjectToSignal參數(shù)必須標(biāo)識(shí)一個(gè)互斥對(duì)象、信標(biāo)對(duì)象或事件。hObjectToWaitOn參數(shù)用于標(biāo)識(shí)下列任何一個(gè)內(nèi)核對(duì)象:互斥對(duì)象、信標(biāo)、事件、定時(shí)器、進(jìn)程、線程、作業(yè)、控制臺(tái)輸入和修改通知。dwMilliseconds參數(shù)指明該函數(shù)為了等待該對(duì)象變?yōu)橐淹ㄖ獱顟B(tài),應(yīng)該等待多長(zhǎng)時(shí)間,而fAlertable標(biāo)志則指明線程等待時(shí)該線程是否應(yīng)該能夠處理任何已經(jīng)排隊(duì)的異步過(guò)程調(diào)用。
總結(jié)
以上是生活随笔為你收集整理的第九章 线程与内核对象的同步(6)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 肺炎的传播途径有哪些?肺炎的传播途径有哪
- 下一篇: OCS 如何在数据库直接给用户增加联络人