C 多執行緒編碼範例

2022-08-31 02:18:09 字數 3024 閱讀 3447

這是乙個系列,我們先從簡單的開始

我們以crazycoder工作室為例,現在6個工作室成員

因工作需要,工作室成員需要做乙個專案,因為是多個人做,那麼我們用多執行緒來做

首先定義成員類 userinfo(表示成員資訊),還有乙個方法work()表示工作

public

class

userinfo

set 

}///

///執行緒執行具體方法 注意:必須是void型別,不能為靜態方法

///by crzycoder

///public

void work()

}現在開始寫執行緒**

public

class

workthread}}

這是乙個簡單的多執行緒例子,呼叫方法 new 

crazycoderthread

().projectthread();

即可我們解決了簡單的多執行緒問題了,現在問題出來了,現在有個project對瘋狂工作室很重要,我們能實現多個成員共同工作但是如何實現任務分配呢?

提供乙個解決方案,答案是在成員類上,我們對userinfo類做如下改動

public

class

userinfo

set 

}private

string _workdetail;

//////

**細節 可以理解為**分工,這個屬性裡我們對crazycoder工作室成員進行工作分工

///by crazycoder

///public

string wrokdetail

set 

}///

///執行緒執行具體方法 注意:必須是void型別,不能為靜態方法

///這裡實現了執行緒分工

///by crazycoder

///public

void work()

else}}

同樣我們對執行緒類改造

//////

c#多執行緒系列教程 瘋狂**工作室出品

///by crazycoder

///public

class

crazycoderthread}}

到這裡,我們已經可以實現對執行緒的分工了,希望能給大家幫助

道理很簡單,我們就是在**定義的時候對執行緒進行了分工

僅作入門之用參考

多執行緒在執行的時候除錯很麻煩,特別是在執行之後出錯,這裡我們就需要對執行緒進行日誌處理

多執行緒執行時出錯時有可能會引起整個執行緒池的崩潰,從而引起程序的意外關掉,那麼在寫程式的時候我們一方面要在可能出錯的地方try{}catche{},另外乙個好習慣就是寫日誌,發乙個日之類

發乙個日誌函式

//////

寫入日誌by crazycoder

////

首發///

///日誌檔名,不需要帶路徑

///日誌內容,單位為行

public

static

void writelog(string filename,string content)

//每個日誌寫一行crazycoder.cn

sw2.writeline("--" + datetime.now.tostring() + "---" + content);

sw2.flush();

sw2.close();

}catch

}///

///獲得當前絕對路徑by crazycoder.cn 含web和winform應用程式方法

//////

指定的路徑

///絕對路徑

public

static

else

//非web程式引用

}同時在容易出錯的地方,在try catch的地方寫日誌,就很容易知道多執行緒出錯的地方,並方便的進行除錯

實現執行緒通訊的例子有很多種,我們這裡介紹幾個簡單的例子給大家看

第二篇我們對執行緒進行了簡單的分工,但是存在乙個問題,小b並不知道小a的工作完成了沒有,並且小b執行緒需要在小a的工作完成之後才能接著做下面的工作,但是小a在機子的辦公室裡懶得出來,他只在辦公室裡說我的工作完成了,但是小b小c都不知道,小b和小c在自己的辦公室裡聽不到小a說的話(我們把每個執行緒比作乙個獨立的辦公室),如此下來,小b和小c只能閒置下來,我們想辦法要讓小b和小c知道小a的工作已經完成了!

老闆急了,這個時候需要考慮發工資的問題,讓人閒著的話是巨大的人力資源和財力的浪費,老闆就想這個時候我們最好的辦法就是給成員們的辦公室裡辦個**,可以互相通**,**總機放在我這裡,為了避免成員偷懶,我讓總機把他們的工作狀態都記錄下來,給成員們每個動作都進行了偵聽,方便高效的考核和發工資。

老闆這人比較更懶,想一下上面的方法雖然可以解決他們偷懶的問題,但是每次讓我去問太麻煩了,我更懶得乙個**乙個**的問,算了,噁心他們,通知小a,如果你工作做完了,就通知總機,小b和小c定時打給總機問小a是否完成了工作,那麼我們就通過**總機的自動應答來協調a,b,c之間的工作吧

這樣**就很簡單了,我們這樣定義

using

system;

using

system.collections.generic;

using

system.text;

using

system.threading;

namespace

crazycoder.

多執行緒教程

set 

}public

void

多執行緒幹活()

}public

class

員工set

}private

string _state;

public

string state

set}

public

void

幹活()

if (_

工作內容 == "b")

//幹活

}if (_

工作內容 == "c")

//幹活}}

}}

ice 多執行緒同步範例

include include include include using namespace std templateclass queue public iceutil monitor void put const t item t get catch t item q.front q.pop ...

執行緒操作範例

例項要求 設計乙個執行緒操作類,要求可以產生三個執行緒物件,並可以分別設定三個執行緒的休眠時間。如下所示 問怎麼設計?從之前學習知道,執行緒的實現有兩種方式,一種是繼承thread類,另一種是實現runnable介面。而且類中應儲存執行緒名稱和休眠時間屬性。在thread類中直接存在name屬性。所...

執行緒操作範例

例項要求 要求 設計乙個執行緒操作類,要求可以產生三個執行緒物件,並可以分別設定三個執行緒的休眠時間,如下所示 執行緒a,休眠10秒 執行緒b,休眠20秒 執行緒c,休眠30秒 問 此類該如何設計?分析從之前的學習應該可以知道,執行緒的實現有兩種方式,一種是繼承thread類,另外一種是實現runn...