實際項目中關于ManualResetEvent的用法

1、在一個線程對應的方法里,如果想隔幾秒鐘執(zhí)行一次,那么在方法里這樣寫
實際項目中關于ManualResetEvent的用法
實際項目中關于ManualResetEvent的用法
關于ManualResetEvent類
實際項目中關于ManualResetEvent的用法
2、在運行程序的時候(啟動控制臺或啟動服務)啟動GetDSBaseData()方法的線程,該線程是后臺線程
實際項目中關于ManualResetEvent的用法
2.1、我調試發(fā)現(xiàn)GetDSBaseData()方法只會在程序啟動的時候執(zhí)行一次。如果捕獲到異常,執(zhí)行Set()方法,重新執(zhí)行一次GetDSBaseData()方法。
實際項目中關于ManualResetEvent的用法
2.2、以下方法UpdateVehicleInfoFromDB()是在上圖中的GetDSBaseData()啟動了一個線程的。以下方法1分鐘執(zhí)行一次:這是一個死循環(huán),每次執(zhí)行完方法,使用Thread.Sleep(60 * 1000)語句停頓1分鐘再執(zhí)行下一次。
實際項目中關于ManualResetEvent的用法
3、首先定義了1個全局的Event對象和1個全局的隊列,由于實例化Event對象時傳入的是false,所以此對象默認狀態(tài)為“非終止”,寫了WaitOne()方法的線程,首次不會執(zhí)行,處于等待狀態(tài)。原因是:首次執(zhí)行隊列里面都沒有數(shù)據,不需執(zhí)行出隊列操作。
實際項目中關于ManualResetEvent的用法
3.1、有2個線程對這個隊列進行操作,一個線程入隊列,一個線程出隊列。
我發(fā)現(xiàn),在入隊列的線程,需要給這個Even對象,執(zhí)行.Set()方法,將事件狀態(tài)設置為終止狀態(tài),允許一個或多個等待線程繼續(xù)。告訴出隊列的線程,現(xiàn)在隊列里有數(shù)據了,可以再次執(zhí)行出隊列的操作了。
調用Set以發(fā)出等待線程可以繼續(xù)進行的信號
實際項目中關于ManualResetEvent的用法
3.2、我發(fā)現(xiàn),在出隊列的線程,需要給這個Event對象執(zhí)行Reset()方法,將事件狀態(tài)設置為非終止狀態(tài),導致線程阻止。由于這是一個無限循環(huán),由于執(zhí)行了Reset(),當下次執(zhí)行到WaitOne()時,會一直處于等待,直到入隊列把Event對象執(zhí)行.Set()方法為止,才會繼續(xù)執(zhí)行。是為了防止隊列中沒有數(shù)據的時候去執(zhí)行出隊列的無限循環(huán),浪費系統(tǒng)資源
實際項目中關于ManualResetEvent的用法

你所需要的網站建設服務,我們均能行業(yè)靠前的水平為你提供.標準是產品質量的保證,主要從事成都網站制作、做網站、外貿營銷網站建設、企業(yè)網站建設、手機網站開發(fā)、網頁設計、成都品牌網站建設、網頁制作、做網站、建網站。創(chuàng)新互聯(lián)公司擁有實力堅強的技術研發(fā)團隊及素養(yǎng)的視覺設計專才。

新聞名稱:實際項目中關于ManualResetEvent的用法
轉載源于:http://bm7419.com/article12/psdegc.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站維護、建站公司、網頁設計公司、做網站網站制作、響應式網站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網頁設計公司