C 多執行緒問題,C 多執行緒程式設計例項

2023-05-09 01:25:05 字數 3818 閱讀 8447

1樓:浩小宇

實現應該不難,但你描述的有點不知道你要幹嘛。

c#多執行緒程式設計例項

c#中構建多執行緒應用程式

高手進~ c# 多執行緒處理

2樓:匿名使用者

非同步多執行緒記憶體釋放主要靠自己,c#的垃圾**機制是,只有當程式段執行完畢後,垃圾**機制才對程式開闢的記憶體進行垃圾**。而多執行緒內的程式,特別是客戶端連線,只要客戶端沒有斷開連線,你的執行緒就會繼續執行,除非斷開客戶端,執行緒的生命週期結束,垃圾**機制才會對該執行緒產生佔用的記憶體進行**。如果客戶端沒有斷開,你就要注意**程執行的過程中去清除垃圾。

一般記憶體不但增大大多數是迴圈建立引用記憶體造成的,所以要留意你執行緒中每乙個引用型別的建立。至於釋放,一是**程結束讓系統自動**,二是手動**。但我建議你給你的資料儲存區指定大小。

你的資料儲存應該是這樣乙個過程,資料儲存區一般接受底端資料,一邊釋放過期資料。例如建立的listdatas = new list(),控制你的最大條數是100條,那麼當》100時,就remove掉多餘的。

希望對你有幫助。

3樓:匿名使用者

.net的垃圾**是自動的,當機器的記憶體有壓力時會被自動觸發。而沒有人知道是什麼時候。

net的開發人員不主張程式設計師自己使用進行垃圾**。

如果一定要使用,需要兩次;

第一次尋找可以被**的資源,並把他們放置到「準備好被**」的佇列了。

第二次施放這個「準備好被**」列隊裡的所有元素。

如果記憶體持續上公升,可以使著看看自己的**有沒有造成記憶體洩露。

比如哪些有idisposable的類open以後沒有被close或者dispose,這是造成記憶體流失的原因之一。

socket類本身也implement了idisposable,所以使用的時候注意有沒有close()

或者用(using socket socket = new socket())

被包含在using語句中的部分。net會自動dispose,不會造成潛在記憶體流失。

另乙個可能造成記憶體流失的原因是 事件綁有其他方法,但在不使用以後沒有取消邦定。

不好意思,我表達的不是很好)

比如 loaded +=onloaded;

private void onloaded (object sender, routedeventargs e)

以下習慣也可以某種程度上的降低記憶體洩露。

loaded -=onloaded;

但不是所有事件繫結會造成記憶體洩露。

c#事件與執行緒

4樓:樓主你真鈔掉了

1:事件(event) 基本上說是乙個使用者操作,如按鍵、點選、滑鼠移動等等,或者是一些出現,如系統生成的通知。應用程式需要在事件發生時響應事件。

例如,中斷。事件是用於程序間通訊。

2:執行緒 被定義為程式的執行路徑。每個執行緒都定義了乙個獨特的控制流。如果您的應用程式涉及到複雜的和耗時的操作,那麼設定不同的執行緒執行路徑往往是有益的,每個執行緒執行特定的工作。

執行緒是輕量級程序。乙個使用執行緒的常見例項是現代作業系統中並行程式設計的實現。使用執行緒節省了 cpu 週期的浪費,同時提高了應用程式的效率。

到目前為止我們編寫的程式是乙個單執行緒作為應用程式的執行例項的單一的過程執行的。但是,這樣子應用程式同時只能執行乙個任務。為了同時執行多個任務,它可以被劃分為更小的執行緒。

5樓:網友

註冊窗體的keypress事件,然後在事件實現**裡寫:

void form1_keypressed(object sender,keypressedeventargs e)}

6樓:夢未央

可以用乙個標誌位給他設定 在進行判斷時 加上"ok~")

7樓:王敏

你是只要實現這個效果就行了麼?

c#非同步和多執行緒有什麼區別和聯絡? 5

8樓:匿名使用者

非同步和多執行緒可以說沒有必然的聯絡,只能說非同步可以通過多執行緒實現而已。

要理解這些東西,你得具備很多相關的知識,作業系統原理,編譯原理等。

簡單地來說,計算機或者說cpu執行你的**都是順序執行的,當前的語句沒有執行完,不會執行後面的語句的,這是永遠不變的規則!

但是這樣的機制會使整個執行效率很低,因為cpu總是要等待當前的語句執行完畢了才會執行後面的**,而計算機在絕多數的時候都是處於等待使用者的輸入,等待磁碟檔案的讀取完成,等待網路資料的傳輸完成中,所以為了提高整個系統的執行效率,提高cpu的執行效率,計算機系統引入了非同步的機制。

非同步機制,簡單地說就是cpu不會傻傻地處於等待狀態,它會先乾別的事情,當它需要的東西已經準備完畢後(大多數的情況都是等待外部的輸入資料準備完畢,也有些是複雜的計算完畢),硬體系統給cpu乙個中斷,告訴有了新的資料了,你現在可以去處理了。

這就是最基本的非同步原理,而現代操作作業系統對硬體系統做了良好的封裝,把很多底層機制遮蔽了,為程式的開發者提供了事件和多執行緒的概念,讓程式的開發者可以更好地利用非同步機制。

再說說多執行緒吧。多執行緒是計算機引入了作業系統之後才有的概念,至於為什麼計算機要引入作業系統,在此就不敘述了,自行了解。多執行緒的實現有兩個方法,乙個就是增加cpu的核數和個數,這是最直接的方法,還有一種是採用cpu輪詢的方式,每個程序都執行一段時間,又去執行另乙個程序的指令,由於切換的速度非常的快,給人的感覺就是同時執行的。

說了這麼多,你可能很失望,因為沒有**,沒有舉例。但我想說的是,用**無法說明這個問題,不同的作業系統,不同的程式語言,不同的程式設計框架,對非同步和多執行緒的定義和處理是不一樣的,但原理就是這樣的。

我們寫**無非就是寫一堆的指令去要求cpu執行,同步的方式就是這樣的:

我:hi,cpu,我要你做一件事情,而且必須立刻馬上就做,因為我正在等著你。

cpu:那你就等著吧,我現在去做。

非同步的方式是這樣的:

我:hi,cpu,我要你做一件事情,但是不是立刻就做,你可以交給下面的人去做,或者找乙個幫手來,我們繼續做後面的事情。

cpu:好的,我現在通知硬體去做,等有結果了我通過事件告訴你。

或者cpu:好的,我讓另乙個核心來做這件事情,我們繼續(其實多執行緒是作業系統實現的,我只是這麼舉個例子而已)

c# 執行緒的定義

9樓:匿名使用者

就好比送一批貨物一樣:把貨物從a全部送到b是乙個程序,在送貨的過程中每輛車送的過程是乙個執行緒,就好像是程序說明了要做什麼事,執行緒就是完成做這件事的每個過程細節。

10樓:匿名使用者

程序是容器,執行緒是在容器裡面幹活的。不過。net裡面不是完全按照一般意義上的程序和執行緒,還有纖程的概念。

11樓:尼瑪放肆

執行緒是作業系統常規多工能力的乙個組成部分並允許應用程式的一部分與其他物件的分別執行的乙個特定物件。具體可以去這裡http://www.

看看,介紹的很好。

12樓:網友

程序就是將軍,執行緒就是士兵。在打戰這件事下,將軍只是指揮,士兵才是真正廝殺幹活的。

所以,乙個程序中,至少會有乙個執行緒,因為,光有人指揮不行,至少要有乙個幹活的。

執行緒就是士兵,所以它的作用就是幹活,多個執行緒,就是可以同時幹多個活。比如,有的偵查,有的打架,有的做飯。如果只有乙個執行緒,那就要按順序來做了,偵查完還要回來打架,打完還得做飯,這不得累死,肯定得輸。

所以,傳送乙個檔案是乙個程序這描述,實際上是錯的,我完全可以在乙個將軍的指揮下,派10個士兵去傳送檔案。

不知道解釋的清楚嗎?

C 多執行緒 Mutex 類的問題。

你這種方式是比較合理的方式,lpclassname 是要查的,而且也是固定的。如果你不用 lpclassname 可以用程式的標題intptr hwnd findwindow null,標題 showwindowasync hwnd,1 setforegroundwindow hwnd c 多執行緒...

c 多執行緒程式設計要用到哪些庫?如何編譯這些庫

千萬別以為現在的c 沒有原生的多執行緒庫 openmp 是乙個多執行緒庫,不過他還需要編譯器的支援,好在現在絕大多數都已經支援 這個可能是目前最流行的原生多執行緒庫了 c 的標準頭process.h 太老的沒有,2002年後的基本都有 中有操作程序和執行環境的函式,能實現簡單的程序級或執行緒級並行操...

易語言多執行緒如何使用,易語言如何使用多執行緒,乙個指令碼控制多個視窗

版本 2 支援庫 ethread 程式來 集 視窗程自序集1 程式集變數 許可 證,整數bai 型.子程式 啟動du視窗 建立完畢zhi許可證 建立進dao入許可證 子程式 啟動視窗 將被銷毀 刪除進入許可證 許可證 子程式 按鈕1 被單擊 啟動執行緒 執行緒處理資料,子程式 執行緒處理資料 進入許...