C 執行緒開始 暫停 終止

2022-08-18 04:27:13 字數 2405 閱讀 4034

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

autoresetevent允許執行緒通過發訊號互相通訊。通常,此通訊涉及執行緒需要獨佔訪問的資源。

執行緒通過呼叫autoresetevent上的 waitone 來等待訊號。如果autoresetevent處於非終止狀態,則該執行緒阻塞,並等待當前控制資源的執行緒

通過呼叫 set 發出資源可用的訊號。

呼叫setautoresetevent發訊號以釋放等待執行緒。autoresetevent將保持終止狀態,直到乙個正在等待的執行緒被釋放,然後自動返回非終止狀態。如果沒有任何執行緒在等待,則狀態將無限期地保持為終止狀態。

可以通過將乙個布林值傳遞給建構函式來控制autoresetevent的初始狀態,如果初始狀態為終止狀態,則為true;否則為false

通俗的來講只有等myreseteven.set()成功執行後,myreseteven.waitone()才能夠獲得執行機會;set是發訊號,waitone是等待訊號,只有發了訊號,

等待的才會執行。如果不發的話,waitone後面的程式就永遠不會執行。下面我們來舉乙個例子:我去書店買書,當我選中一本書後我會去收費處付錢,

付好錢後再去倉庫取書。這個順序不能顛倒,我作為主線程,收費處和倉庫做兩個輔助線程,**如下:

using system;

using system.linq;

using system.activities;

using system.activities.statements;

using system.threading;

namespace caryaredemo

", i);

number = i;

//signal that a value has been written.

myresetevent.set();

changeevent.set();

thread.sleep(0);

}paymoneythread.abort();

getbookthread.abort();

}static void paymoneyproc()

:數量", thread.currentthread.name, number);}}

static void getbookproc()

:數量", thread.currentthread.name, number);

console.writeline("------------------------------------------");

thread.sleep(0);}}

}}執行結果如下:

autoresetevent與manualresetevent的區別

他們的用法\宣告都很類似,set方法將訊號置為傳送狀態 reset方法將訊號置為不傳送狀態waitone等待訊號的傳送。其實,從名字就可以看出乙個手動,

乙個自動,這個手動和自動實際指的是在reset方法的處理上,如下面例子:

public autoresetevent autoevent=new autoresetevent(true);

public manualresetevent manualevent=new manualresetevent(true);

預設訊號都處於傳送狀態,

autoevent.waitone();

manualevent.waitone();

如果 某個執行緒呼叫上面該方法,則當訊號處於傳送狀態時,該執行緒會得到訊號,得以繼續執行。差別就在呼叫後,autoevent.waitone()每次只允許乙個執行緒

進入,當某個執行緒得到訊號(也就是有其他執行緒呼叫了autoevent.set()方法後)後,autoevent會自動又將訊號置為不傳送狀態,則其他呼叫waitone的執行緒只

有繼續等待.也就是說,autoevent一次只喚醒乙個執行緒。而manualevent則可以喚醒多個執行緒,因為當某個執行緒呼叫了set方法後,其他呼叫waitone的執行緒

獲得訊號得以繼續執行,而manualevent不會自動將訊號置為不傳送.也就是說,除非手工呼叫了manualevent.reset().方法,則 manualevent將一直保持有訊號狀態,manualevent也就可以同時喚醒多個執行緒繼續執行。如果上面的程式換成 manualresetevent的話,就需要在waitone後面做下reset。

如何暫停和終止執行緒

你能看到這篇文章,說明你已經知道如何建立執行緒了,因此,這裡就不說明執行緒的建立了,詳細說一下執行緒的暫停和終止。我們首先了解一下,什麼是前台執行緒和後台執行緒。net的公用語言執行時 clr 能區分兩種不同型別的執行緒 前台執行緒和後台執行緒。這兩者的區別就是 應用程式必須執行完所有的前台執行緒才...

c 終止執行緒

最近在弄乙個等待視窗,使用了執行緒去呼叫form。在結束執行緒這邊碰到了些問題。呼叫 thread.abort thread.join 老被threadabortexception異常丟擲困擾。後來上網查詢了相關資訊,發現thread.abort 就是通過threadabortexception異常...

android Thread 停止 開始 暫停

package com.example.thread import android.os.bundle import android.view.menu import android.view.view import android.view.view.onclicklistener import ...