溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

以1個(gè)實(shí)例講解ManualResetEvent的作用

發(fā)布時(shí)間:2020-07-30 12:57:42 來(lái)源:網(wǎng)絡(luò) 閱讀:198 作者:森大科技 欄目:編程語(yǔ)言

來(lái)自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=349
GPS平臺(tái)、網(wǎng)站建設(shè)、軟件開(kāi)發(fā)、系統(tǒng)運(yùn)維,找森大網(wǎng)絡(luò)科技!
http://cnsendnet.taobao.com

  1. 源碼下載:
    下載地址:http://files.cnblogs.com/tianzhiliang/ManualResetEventDemo.rar
    Demo:
    以1個(gè)實(shí)例講解ManualResetEvent的作用
  2. ManualResetEvent詳解
    ManualResetEvent 允許線程通過(guò)發(fā)信號(hào)互相通信。通常,此通信涉及一個(gè)線程在其他線程進(jìn)行之前必須完成的任務(wù)。當(dāng)一個(gè)線程開(kāi)始一個(gè)活動(dòng)(此活動(dòng)必須完成后,其他線程才能開(kāi)始)時(shí),它調(diào)用 Reset 以將 ManualResetEvent 置于非終止?fàn)顟B(tài),此線程可被視為控制 ManualResetEvent。調(diào)用 ManualResetEvent 上的 WaitOne 的線程將阻止,并等待信號(hào)。當(dāng)控制線程完成活動(dòng)時(shí),它調(diào)用 Set 以發(fā)出等待線程可以繼續(xù)進(jìn)行的信號(hào)。并釋放所有等待線程。一旦它被終止,ManualResetEvent 將保持終止?fàn)顟B(tài)(即對(duì) WaitOne 的調(diào)用的線程將立即返回,并不阻塞),直到它被手動(dòng)重置??梢酝ㄟ^(guò)將布爾值傳遞給構(gòu)造函數(shù)來(lái)控制 ManualResetEvent 的初始狀態(tài),如果初始狀態(tài)處于終止?fàn)顟B(tài),為 true;否則為 false。

代碼在同級(jí)目錄中有,這里就不貼出來(lái)了。
以1個(gè)實(shí)例講解ManualResetEvent的作用
圖1
從下圖中可以看出,實(shí)例化ManualResetEvent對(duì)象時(shí),傳的是true,則將初始狀態(tài)設(shè)置為終止。程序首次運(yùn)行,兩個(gè)線程都在持續(xù)運(yùn)行,如圖3所示
以1個(gè)實(shí)例講解ManualResetEvent的作用
圖2
以1個(gè)實(shí)例講解ManualResetEvent的作用
圖3
輸入reset命令,執(zhí)行Reset方法,將事件狀態(tài)設(shè)置為非終止?fàn)顟B(tài),導(dǎo)致線程阻止。所以兩個(gè)線程方法都停止運(yùn)行了
以1個(gè)實(shí)例講解ManualResetEvent的作用
輸入set命令,執(zhí)行Set方法,將事件狀態(tài)設(shè)置為終止?fàn)顟B(tài),允許一個(gè)或多個(gè)等待線程繼續(xù),所以2個(gè)線程又都開(kāi)始運(yùn)行了。
以1個(gè)實(shí)例講解ManualResetEvent的作用
![]
結(jié)論:WaitOne方法在這里很關(guān)鍵,阻止當(dāng)前線程,直到當(dāng)前 System.Threading.WaitHandle 收到信號(hào)。ManualResetEvent對(duì)象可以作為一個(gè)全局變量,多個(gè)線程可以訪問(wèn)它,如果ManualResetEvent對(duì)象實(shí)例化傳的是true時(shí),或者M(jìn)anualResetEvent對(duì)象被執(zhí)行Set方法時(shí),寫(xiě)了.WaitOne的線程方法將繼續(xù)執(zhí)行;如果ManualResetEvent對(duì)象被執(zhí)行Reset方法時(shí),寫(xiě)了.WaitOne的線程方法將停止執(zhí)行,一直等待,知道被執(zhí)行了Set方法為止。
以1個(gè)實(shí)例講解ManualResetEvent的作用
驗(yàn)證:如下圖所示,注釋了WaitOne方法,即使執(zhí)行了Reset方法,由于沒(méi)有WaitOne的控制,這兩個(gè)線程一樣的在運(yùn)行。
以1個(gè)實(shí)例講解ManualResetEvent的作用

來(lái)自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=349
GPS平臺(tái)、網(wǎng)站建設(shè)、軟件開(kāi)發(fā)、系統(tǒng)運(yùn)維,找森大網(wǎng)絡(luò)科技!
http://cnsendnet.taobao.com

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI