你能看到這篇文章,說明你已經知道如何建立執行緒了,因此,這裡就不說明執行緒的建立了,詳細說一下執行緒的暫停和終止。
我們首先了解一下,什麼是前台執行緒和後台執行緒。
.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...