C 如何優雅的結束乙個執行緒

2021-09-14 02:23:00 字數 776 閱讀 6906

有乙個無線迴圈的執行緒需要時時接收資料,如下:
class eventclass

event_recedatasdone?.invoke(this, eventargs.empty);

}});

}public void stoprecedatas()

}class program

;ec.startrecedatas();

system.threading.thread.sleep(1000);

ec.stoprecedatas();

console.readkey();

}}

但是每次呼叫stoprecedatas()都不能立即結束執行緒,改為.net 的協作取消執行緒後就沒問題了,協作取消執行緒**如下:

class eventclass

event_recedatasdone?.invoke(this, eventargs.empty);

}});

}public void stoprecedatas()

}class program

;ec.startrecedatas();

system.threading.thread.sleep(1000);

ec.stoprecedatas();

console.readkey();

}}

在取消乙個執行時間很長的執行緒時,最好用微軟自己的協作式取消執行緒機制,可以立即結束執行緒

如何優雅關閉乙個執行緒

當我們去thread類裡面找相關的介面時,發現有 個stop方法,看上去非常適合用來終止乙個執行緒,但是這個方法上面標了個 deprecated註解,非常明顯,這是乙個廢棄方法,不建議使用它。主要有兩個方面的原因 因為這個方法會將執行緒直接殺掉,沒有任何喘息機會,一旦執行緒被殺死,後面的 邏輯就再也...

如何優雅的停止乙個執行緒

首先我們先了解下,執行緒是分為使用者執行緒和守護執行緒的,他們的區別就在 使用者執行緒當我們的主線程停止後,使用者執行緒不會隨著主線程停止。守護執行緒當我們的主線程停止後,會跟隨著主線程一起停止。一般我們建立的都是使用者執行緒,那守護執行緒有哪些呢,例如跟程式一起啟動的gc執行緒就是守護執行緒。停止...

如何立即結束乙個執行緒?

最初的做法是在每次迴圈時判斷乙個標誌位 bool 如果為false就停止迴圈,執行緒隨即結束。但是這樣帶來的乙個問題是由於迴圈每次都要間隔幾秒,sleep一下,會導致執行緒無法立即結束,最長會有那n秒的延遲,這顯然不是我所希望看到的。dispatch async dispatch get globa...