如何暫停和終止執行緒

2022-03-06 22:23:39 字數 2947 閱讀 4959

你能看到這篇文章,說明你已經知道如何建立執行緒了,因此,這裡就不說明執行緒的建立了,詳細說一下執行緒的暫停和終止。

我們首先了解一下,什麼是前台執行緒後台執行緒

.net的公用語言執行時(clr)能區分兩種不同型別的執行緒:前台執行緒和後台執行緒。這兩者的區別就是:應用程式必須執行完所有的前台執行緒才可以退出;而對於後台執行緒,應用程式則可以不考慮其是否已經執行完畢而直接退出,所有的後台執行緒在應用程式退出時都會自動結束。

對於如何暫停和繼續執行緒的執行,在.net2.0之後,suspend

、resume

這兩種方法都已停止使用,ms官方推薦使用標記判斷的方式來處理執行緒的暫停與繼續。

對於執行緒的終止,在該執行緒處理完該執行緒的指定任務,退出該執行緒執行任務的函式後,執行緒狀態將改變為"stopped",然後分別依前台執行緒和後台執行緒的區別,在應用程式退出時執行緒會自動結束。因此,如果我們想使某個執行緒停止執行,就使該執行緒所執行的函式執行完畢就可以了。

互斥與同步

互斥和同步是兩個緊密相關而又容易混淆的概念。

互斥:是指某一資源同時只允許乙個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。

同步:是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源,如「第一類讀寫者模型」。

關於執行緒同步,可以看這篇文章:

下面,是我測試的**:

**1using

system;

2using

system.collections.generic;

3using

system.text;

4using

system.threading;56

namespace

threadtest7"

, i);

24ts[i].isbackground 

=true;25

}26thread.sleep(

1000

);27

for(

inti =0

; i 

<

ts.length; 

++i)

2831

thread.sleep(

2000

);32

for(

inti =0

; i 

<

arr.length; 

++i)

3336

thread.sleep(

5000

);37

for(

inti =0

; i 

<

ts.length; 

++i)

38__

", ts[i].name, ts[i].threadstate);40}

41thread.sleep(

5000

);42

for(

inti =0

; i 

<

ts.length; 

++i)

43__

", ts[i].name, ts[i].threadstate);

45ts[i].abort();46}

47thread.sleep(

5000

);48

for(

inti =0

; i 

<

ts.length; 

++i)

49__

", ts[i].name, ts[i].threadstate);51}

52console.writeline(

"...");

53}54catch

(exception ex)

5558}59

60class

abc61

7071

public

abc()

7278

79public

void

run(

object

o)80__"

, thread.currentthread.name, thread.currentthread.threadstate);

83console.writeline();

84for

(inti =

start; i 

<=

end; 

++i)

8588

console.writeline();                        

89console.writeline(

"isrun __

", thread.currentthread.name, thread.currentthread.threadstate);

9091

while

(true)92

99else

100103

}104

console.writeline(

"end __

", thread.currentthread.name, thread.currentthread.threadstate);

105}

106}

107}

108}

109這是執行結果:

如上圖可見,執行緒執行時,其狀態值為background,當執行緒執行完成後,其狀態值為stopped.

以上是以後臺執行緒為例。

C 執行緒開始 暫停 終止

寫測試工具需要多執行緒的暫停終止。用c 的 thread.about join resume suspend 又提示函式過時了,不建議使用。於是四處找方法,訊號量 互斥鎖什麼的方法也不少,找到下面這個方法,倒是很實用,如下 autoresetevent允許執行緒通過發訊號互相通訊。通常,此通訊涉及執...

執行緒如何終止呢?

執行緒終止的三種方法 1 直接呼叫執行緒的stop方法 通過stop方法可以很快速 方便地終止乙個執行緒 那為什麼jdk不推薦使用stop終止執行緒的方法的原因,因為它很暴力會帶來資料不一致性的問題。如果你確定直接終止對你的業務邏輯沒有影響,也可以使用,但是因為被 deprecated標註了,jdk...

如何安全終止MFC執行緒

3 在檔案中定義執行緒傳遞引數的資料結構,如下 demodlg.h typedef struct thread param thread param 4 在cdemodlg類中新增成員變數,如下 demodlg.h protected cwinthread m pthread thread para...