亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

線程池中一個線程給一個信號量阻塞另一個線程運行

線程池中一個線程給一個信號量阻塞另一個線程運行

C#
藍山帝景 2018-12-16 18:09:21
<P>線程池中有兩個線程,A,B,其中B是一個輪詢線程,使用了&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThreadPool.RegisterWaitForSingleObject(waitObj, new WaitOrTimerCallback(test), null, 5000, false);<BR></P> <P>我希望通過線程A來,來控制(阻塞或是繼續)其輪詢過程</P>
查看完整描述

2 回答

?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

用WaitOne方法,就可以阻塞啦.. 不知道,你想怎么用,如果你希望的是,當通知有數據需要處理的時候,可以用Queue,然后用While去判斷這個Queue的長度是否大于0,如果是,就Set, 反之WaitOne .....

查看完整回答
反對 回復 2018-12-20
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

你只需要在你的線程函數里面有一個循環,每次先等待某個信號量就可以了了。 2008-08-09 更新: 昨天奧運開幕了~~~~ 我并不確定.NET是否提供了默認的支持。詳細的方案,還是要多看看MSDN。找找上面有沒有特定的解決方案。 如果我來做,我會這樣做: 1. 將線程中需要執行的動作劃分為多個單元。 一般情況下,長時間執行的線程中都會有循環或多個嵌套的循環。循環體的開始部分應該就是我所說的單元的邊界。 2. 定義一個信號量 在啟動一個線程的時候,為這個線程定義一個信號量。 3. 在單元的分界點檢查信號量 在每個單元的開始處,檢查信號量,如果信號量被設置,設置一個循環不斷的檢查該信號,直到信號量被復位,再繼續開始這個單元的執行。 因此,如果你希望能夠產生立刻中斷的感覺,只需要將執行單元劃分的足夠細小。就可以了。其中需要注意的是:在循環檢查信號量的循環體中,最好讓線程Sleep一下。否則,會CPU占用率很高。 思路大概如此,具體的代碼實現,因為很久沒有寫過這方面的代碼了,就不花時間去寫和調試了。多看看MSDN,應該很容易實現上面的思路的。有什么問題我們可以再討論(給我發短消息:))。

查看完整回答
反對 回復 2018-12-20
  • 2 回答
  • 0 關注
  • 1038 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號