C 乙個簡單多執行緒的例項

2021-08-15 04:53:55 字數 2362 閱讀 4407

很多初學者聽到執行緒會覺得晦澀難懂,很多資料一堆專有名詞也是讓人心煩意亂,本著學習加分享的態度,這裡做乙個簡單的例項分享幫助初學者們初識多執行緒。 

首先大概講述一下多執行緒和多程序的區別,任務管理器裡各種不同的程序就是多程序,或者是你同時執行多個」.exe』程式就可以理解為多程序,多程序是要更多消耗cpu資源的。 

多執行緒是相對於程序裡更小的單位,比如3個執行緒在1個程序裡進行不同的操作,他們所擁有的資源就是那個程序裡的資源,不會占用更多資源,只是通過執行緒更合理的分配資源。 

好,大概區分清楚兩者後我們進入執行緒模式!

一.單執行緒

public static void game()

public static void music() static void main(string args)

我們控制台輸出的結果為: 

2016-11-15 04:30:56.724 玩潛艇大戰 

2016-11-15 04:30:56.755 聽七里香

二.雙線程

當然,我們現在的時代大可不必那麼老實的先幹什麼再幹什麼,我們可以選擇邊玩遊戲,邊聽歌。模擬**如下:

public static void game()

public static void music() static void main(string args)

控制台輸出結果為: 

2016-11-15 04:43:48.987 玩潛艇大戰 

2016-11-15 04:43:48.988 聽七里香

2016-11-15 04:45:19.315 聽七里香 

2016-11-15 04:45:19.315 玩潛艇大戰

2016-11-15 04:46:38.513 聽七里香 

2016-11-15 04:46:38.512 玩潛艇大戰 

這三組結果可以看出,運用執行緒後玩遊戲和聽**可以同時展開,兩個任務不分先後時間差明顯比單執行緒模式要少,更合理的利用了資源。

三.三線程

其實以上的**中還隱藏了乙個執行緒,就是主線程main(string args),我們下面再改進一下**看看三個執行緒執行時的情況。 

核心**更改如下:

static void main(string args)

控制台輸出結果: 

2016-11-15 05:01:15.598 聽七里香 

2016-11-15 05:01:15.575 邊玩遊戲邊聽** 

2016-11-15 05:01:15.598 玩潛艇大戰

2016-11-15 05:03:25.966 聽七里香 

2016-11-15 05:03:25.964 邊玩遊戲邊聽** 

2016-11-15 05:03:25.965 玩潛艇大戰

2016-11-15 05:03:50.022 聽七里香 

2016-11-15 05:03:50.001 邊玩遊戲邊聽** 

2016-11-15 05:03:50.001 玩潛艇大戰

不知道大家注意到沒有,主線程每次都是先執行的,並且聽**好像也總是比玩遊戲要晚執行,因為**裡我有乙個改動:

t1.priority = threadpriority.belownormal;

t2.priority = threadpriority.lowest;

沒錯,我設定了執行緒的優先順序,t2代表聽**的執行緒優先順序比t1玩遊戲的優先順序要低。對應現實來說就好像我要先開啟遊戲玩著玩著覺得配樂不好聽,所以我選擇靜音再點開我最愛的《七里香》,這樣玩遊戲就更加帶勁了!

四.執行緒的優先順序

執行緒的優先順序可以通過thread類priority屬性設定,priority屬性是乙個threadpriority型列舉,列舉了5個優先等級:abovenormal、belownormal、highest、lowest、normal。普通執行緒的優先順序預設為normal;如果想有更高的優先順序,可設定為abovenormal或highest;如果想有較低的優先順序,可設定為belownormal或lowest。 

也許有人會問那之前的例子主線程總是先完成是不是優先順序預設要高呢?其實不是的,主線程和工作執行緒的優先順序相同,也是交替進行,被執行的概率大體相同,至於每次先完成是因為主線程會先啟動,只有啟動了主線程才能開啟其他工作執行緒。 

要注意的是:系統優先執行優先順序較高的執行緒,但這只意味著優先順序較高的執行緒占有更多的cpu時間,並不意味著一定要先執行完優先順序較高的執行緒,才會執行優先順序較低的執行緒。

C 多執行緒的乙個簡單應用(C 多執行緒相關)

開的執行緒要放在主線程邏輯前否則並不會利用好主線程資源 用join來等待執行緒結束 可以通過mainthreadid std this thread get id 來獲取主函式id,通過auto id s.get id 來獲取子執行緒id,判斷兩個id來確定自己當前函式是執行在主線程還是分執行緒 f...

乙個簡單的多執行緒

頭部 type tmythread class tthread protected procedure execute override end procedure tmythread.execute begin coinitialize nil 如果不加這句,會提示未呼叫coinitialize ...

C 乙個簡單的多執行緒例子

乙個是窗體 乙個是class 直接上 了,先來窗體的吧。窗體 引入命名空間 using system.threading 完整 namespace threadexample private void btn start click object sender,eventargs e private...