※ 引述《james732 (好人超)》之銘言:
: ※ 引述《liaommx (Orz)》之銘言:
: : 我的程式邏輯是這樣的
: : do
: : {
: : switch(int)
: : case 1:
: : A();
: : case 2:
: : B();
: : tx.enable=true;
: : C();
: : default:
: : break;
: : }while(true)
: : 我B和C的子程式中間,有一個tx.enable要定時做100次的某件事情(timer)
: : 但是要等B完做tx,
: : tx做完100次才進到C這個子程式,
: : 請問這邊該怎麼做比較適合呢?
: : 直接選tx.enable,
: : 這樣整個邏輯會同時做下去,
: : 我這個邏輯是有前後關係的.
: : 謝謝大家,
: 我的想法是這樣的:
: 準備一個 mutex, 一開始把它上鎖
: 在 C() 的一開始對這個 mutex 再一次上鎖
: 因為已經鎖著,C() 無法再鎖一次,所以會停下來等待解鎖
: 然後在 timer() 執行一百次後,把 mutex 給解鎖
: 這個時候 C() 便可以取得 mutex,並且繼續執行了
其實跟WaitHandle概念是一樣,可以使用AutoResetEvent 類別.
宣告一個 AutoResetEvent are = new AutoResetEvent(false);
在tx.enable = true;之後
將 are.waitone(); 使程序不往下Go.
待 timer內跑完100次後 再將are.set(); 讓主執行緒再往下Go.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.221.216.223