五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

秒殺多線程-事件Event

2023-02-01 21:34 作者:ベ計院小白隆ミ  | 我要投稿

推薦閱讀:


事件Event實際上是個內(nèi)核對象,它的使用非常方便。

常用的函數(shù)

CreateEvent()

函數(shù)功能:創(chuàng)建事件函數(shù)原型:

函數(shù)說明:

第一個參數(shù)表示安全控制,一般直接傳入NULL。

第二個參數(shù)確定事件是手動置位還是自動置位,傳入TRUE表示手動置位,傳入FALSE表示自動置位。如果為自動置位,則對該事件調(diào)用WaitForSingleObject()后會自動調(diào)用ResetEvent()使事件變成未觸發(fā)狀態(tài)。打個小小比方,手動置位事件相當于教室門,教室門一旦打開(被觸發(fā)),所有人都可以進入直到老師去關(guān)上教室門(事件變成未觸發(fā))。自動置位事件就相當于醫(yī)院里拍X光的房間門,門打開后只能進入一個人,這個人進去后會將門關(guān)上,其它人不能進入除非門重新被打開(事件重新被觸發(fā))。

第三個參數(shù)表示事件的初始狀態(tài),傳入TRUR表示已觸發(fā)。第四個參數(shù)表示事件的名稱,傳入NULL表示匿名事件。


OpenEvent()

函數(shù)功能:根據(jù)名稱獲得一個事件句柄。函數(shù)原型:

函數(shù)說明:

第一個參數(shù)表示訪問權(quán)限,對事件一般傳入EVENT_ALL_ACCESS。詳細解釋可以查看MSDN文檔。

第二個參數(shù)表示事件句柄繼承性,一般傳入TRUE即可。

第三個參數(shù)表示名稱,不同進程中的各線程可以通過名稱來確保它們訪問同一個事件。


SetEvent()函數(shù)功能:觸發(fā)事件函數(shù)原型:

函數(shù)說明:每次觸發(fā)后,必有一個或多個處于等待狀態(tài)下的線程變成可調(diào)度狀態(tài)。


ResetEvent()

函數(shù)功能:將事件設(shè)為末觸發(fā)

函數(shù)原型:

函數(shù)說明:將指定的事件對象設(shè)置為非信號狀態(tài)。

最后一個事件的清理與銷毀由于事件是內(nèi)核對象,因此使用CloseHandle()就可以完成清理與銷毀了。

修改代碼

經(jīng)典線線程同步問題已經(jīng)圓滿的解決了——線程編號的輸出沒有重復(fù),說明主線程與子線程達到了同步。全局資源的輸出是遞增的,說明各子線程已經(jīng)互斥的訪問和輸出該全局資源。

繼續(xù)深挖下事件Event

接下來再繼續(xù)深挖下事件Event,看看它還有什么秘密沒。

PulseEvent()

函數(shù)功能:將事件觸發(fā)后立即將事件設(shè)置為未觸發(fā),相當于觸發(fā)一個事件脈沖。

函數(shù)原型:

函數(shù)說明:這是一個不常用的事件函數(shù),此函數(shù)相當于SetEvent()后立即調(diào)用ResetEvent();此時情況可以分為兩種:

1.對于手動置位事件,所有正處于等待狀態(tài)下線程都變成可調(diào)度狀態(tài)。

2.對于自動置位事件,所有正處于等待狀態(tài)下線程只有一個變成可調(diào)度狀態(tài)。

此后事件是末觸發(fā)的。該函數(shù)不穩(wěn)定,因為無法預(yù)知在調(diào)用PulseEvent ()時哪些線程正處于等待狀態(tài)。

下面對這個觸發(fā)一個事件脈沖PulseEvent()寫一個例子,主線程啟動7個子線程,其中有5個線程Sleep(10)后對一事件調(diào)用等待函數(shù)(稱為快線程),另有2個線程Sleep(100)后也對該事件調(diào)用等待函數(shù)(稱為慢線程)。主線程啟動所有子線程后再Sleep(50)保證有5個快線程都正處于等待狀態(tài)中。此時若主線程觸發(fā)一個事件脈沖,那么對于手動置位事件,這5個線程都將順利執(zhí)行下去。對于自動置位事件,這5個線程中只有一個順利執(zhí)行下去。而不論手動置位事件還是自動置位事件,那2個慢線程由于Sleep(100)所以會錯過事件脈沖,因此慢線程都會進入等待狀態(tài)而無法順利執(zhí)行下去。

自動置位

自動置位

手動置位

手動置位

總結(jié)事件Event

1.事件是內(nèi)核對象,事件分為手動置位事件和自動置位事件。事件Event內(nèi)部它包含一個使用計數(shù)(所有內(nèi)核對象都有),一個布爾值表示是手動置位事件還是自動置位事件,另一個布爾值用來表示事件有無觸發(fā)。

2.事件可以由SetEvent()來觸發(fā),由ResetEvent()來設(shè)成未觸發(fā)。還可以由PulseEvent()來發(fā)出一個事件脈沖。

3.事件可以解決線程間同步問題,因此也能解決互斥(一種特殊的同步)問題。


下一篇將介紹互斥量Mutex


參考:https://blog.csdn.net/morewindows/article/details/7445233



秒殺多線程-事件Event的評論 (共 條)

分享到微博請遵守國家法律
璧山县| 西乌珠穆沁旗| 酉阳| 乌兰察布市| 宝山区| 平度市| 收藏| 龙岩市| 兰溪市| 浠水县| 库车县| 治多县| 米林县| 邵阳县| 古田县| 惠来县| 衢州市| 商河县| 元谋县| 鹰潭市| 南充市| 濮阳县| 正蓝旗| 香港 | 云龙县| 万宁市| 南城县| 铜陵市| 封开县| 建平县| 汉中市| 淮南市| 乐安县| 邵阳县| 巫山县| 历史| 和平区| 沐川县| 龙州县| 沧源| 江阴市|