C多執行緒學習 二 如何操縱執行緒

2021-08-07 01:42:35 字數 2164 閱讀 5946

下面我們就動手來建立乙個執行緒,使用thread類建立執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒幹什麼事)

在c#中,執行緒入口是通過threadstart**(delegate)來提供的,你可以把threadstart理解為乙個函式指標,指向執行緒要執行的函式,當呼叫thread.start()方法後,執行緒就開始執行threadstart所代表或者說指向的函式。

開啟你的新建乙個控制台應用程式(console application),編寫完全控制乙個執行緒的**示例:

using system;

using system.threading;

namespace threadtest

};public class ******

}}這段程式包含兩個類alpha和******,在建立執行緒othread時我們用指向alpha.beta()方法的初始化了threadstart**(delegate)物件,當我們建立的執行緒othread呼叫othread.start()方法啟動時,實際上程式執行的是alpha.

beta()方法:

alpha oalpha = new alpha();

thread othread = new thread(new threadstart(oalpha.beta));

othread.start();

然後在main()函式的while迴圈中,我們使用靜態方法thread.sleep()讓主線程停了1ms,這段時間cpu轉向執行執行緒othread。然後我們試圖用thread.

abort()方法終止執行緒othread,注意後面的othread.join(),thread.join()方法使主線程等待,直到othread執行緒結束。

你可以給thread.join()方法指定乙個int型的引數作為等待的最長時間。之後,我們試圖用thread.

start()方法重新啟動執行緒othread,但是顯然abort()方法帶來的後果是不可恢復的終止執行緒,所以最後程式會丟擲threadstateexception異常。

主線程main()函式

所有執行緒都是依附於main()函式所在的執行緒的,main()函式是c#程式的入口,起始執行緒可以稱之為主線程。如果所有的前台執行緒都停止了,那麼主線程可以終止,而所有的後台執行緒都將無條件終止。所有的執行緒雖然在微觀上是序列執行的,但是在巨集觀上你完全可以認為它們在並行執行。

thread.threadstate 屬性

這個屬性代表了執行緒執行時狀態,在不同的情況下有不同的值,我們有時候可以通過對該值的判斷來設計程式流程。

threadstate 屬性的取值如下:

aborted:執行緒已停止;

abortrequested:執行緒的thread.abort()方法已被呼叫,但是執行緒還未停止;

background:執行緒在後台執行,與屬性thread.isbackground有關;

running:執行緒正在正常執行;

stopped:執行緒已經被停止;

stoprequested:執行緒正在被要求停止;

suspended:執行緒已經被掛起(此狀態下,可以通過呼叫resume()方法重新執行);

suspendrequested:執行緒正在要求被掛起,但是未來得及響應;

unstarted:未呼叫thread.start()開始執行緒的執行;

waitsleepjoin:執行緒因為呼叫了wait(),sleep()或join()等方法處於封鎖狀態;

上面提到了background狀態表示該執行緒在後台執行,那麼後台執行的執行緒有什麼特別的地方呢?其實後台執行緒跟前臺執行緒只有乙個區別,那就是後台執行緒不妨礙程式的終止。一旦乙個程序所有的前台執行緒都終止後,clr(通用語言執行環境)將通過呼叫任意乙個存活中的後台程序的abort()方法來徹底終止程序。

執行緒的優先順序

當執行緒之間爭奪cpu時間時,cpu 是按照執行緒的優先順序給予服務的。在c#應用程式中,使用者可以設定5個不同的優先順序,由高到低分別是highest,abovenormal,normal,belownormal,lowest,在建立執行緒時如果不指定優先順序,那麼系統預設為threadpriority.normal。

給乙個執行緒指定優先順序,我們可以使用如下**:

//設定優先順序為最低

mythread.priority=threadpriority.lowest;

通過設定執行緒的優先順序,我們可以安排一些相對重要的執行緒優先執行,例如對使用者的響應等等。

高二學生如何學習

1.耍小聰明的人善於與別人說話。充滿智慧型的人則善聽。2.人生有兩條路 一條用腳走現實之路,一條用心走夢想之路。心有多遠,夢想就有多遠。當下學生導致成績下滑的原因 早戀 家庭變故 學法守舊。3.乙個知識能否記住,不是是否背誦過,而是真正理解。理解透,熟練透,總結透 4.乙個知識只許錯一次就是高手。中...

C語言之計算機基礎學習二

機器數與真值 一 機器數及其編碼 機器數就是數值在計算機中的表示形式,真值則是它在現實中的實際數值。可以這樣簡單的理解。因為計算機只能直接識別和處理用0 1兩種狀態的二進位制形式的資料,所以在計算機中無法按人們的日常書寫習慣用正 負符號加絕對值來表示數值,而與數字一樣採用二進位制 0和1來表示正 負...

C證15如何讓學生適應新的學習環境

題目15 搬新家了 主題 適應新環境。活動目的 讓學生知道熟悉與適應新環境的內容和方法。活動形式 情境討論 角色表演。重點難點 重點 讓學生知道如何去適應新環境。難點 幫助學生努力適應新環境,以減輕或消除 分離焦慮 可能帶來的不利影響。活動準備 了解班裡新搬家 新轉學的同學。排練小品。活動過程 一 ...