最初的做法是在每次迴圈時判斷乙個標誌位(bool),如果為false就停止迴圈,執行緒隨即結束。但是這樣帶來的乙個問題是由於迴圈每次都要間隔幾秒,sleep一下,會導致執行緒無法立即結束,最長會有那n秒的延遲,這顯然不是我所希望看到的。
dispatch_async(dispatch_get_global_queue(0,0), ^()
});
既然有幾秒鐘延遲,那就把休眠時間拆分:
dispatch_async(queue, ^()
sleep(1); if(!running)
sleep(1); if(!running)
sleep(1); if(!running)
sleep(1); if(!running)
}});
這樣做不夠優雅,只是把延遲時間縮短而已,還是會有1秒鐘的延遲。
假如還有這樣的需求:我不光要能夠立即結束執行緒,還能再次啟動它,做到隨心所欲的控制。這個是目前能想到的還算滿意的方法,把上述啟動執行緒的邏輯做成2個單例,第一次執行時,使用第乙個單例;第二次執行時判斷如果第乙個單例在執行,則結束它,執行第二個單例。這樣就不必等第乙個執行緒結束,直接再開乙個執行緒。如果再執行,則最多隻會同時出現兩個執行緒而已。
@implement myclass
+ (id)shareinstance1
+ (id)shareinstance2
+ (void)func
}else
}- (void)begin
idle = yes;
});}- (void)end
@end
以上就是我目前能想到的思路,如有更好的方案請告訴我。 C 如何優雅的結束乙個執行緒
有乙個無線迴圈的執行緒需要時時接收資料,如下 class eventclass event recedatasdone?invoke this,eventargs.empty public void stoprecedatas class program ec.startrecedatas syst...
C 啟動和結束乙個執行緒
在程式執行中會遇到啟動本軟體的exe問,或者啟用其它的exe檔案,已達到執行某些操作的作用。下面是兩種最常見的啟動exe檔案。1 呼叫系統dll使用其提供的方法。引用的dll,csharp view plain copy print dllimport kernel32.dll public sta...
ARM指令中如何判斷乙個立即數是有效立即數
在arm處理器的組合語言中,對指令語法格式中的的常數表示式有這樣的規定 該常數必須對應8位位圖,即常數是由乙個8位的常數迴圈移位偶數字得到的。首先從arm指令系統的語法格式說起。一條arm指令語法格式分為如下幾個部分 其中,內的項是必須的,內的項是可選的,如是指令助記符,是必須的,而 為指令執行條件...