日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c#实现多线程代码例子

發布時間:2025/4/16 C# 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c#实现多线程代码例子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

相信大家都有用過網際快車等下載資源的經歷,它里面是可以設置線程數的(近年版本默認是10,曾經默認是5)。它會將文件分成與線程數相同的部分,然后每個線程下載自己的那一部分,這樣下載效率就有可能提高。相信大家都有加多線程數,提升下載效率的經歷。但細心的用戶會發現,在帶寬一定的情況下,并不是線程越多,速度越快,而是在某一點達到峰值。
在C#中用多線程并不難實現。它有一個命名空間:System.Threading,提供了多線程的支持。
  

要開啟一個新線程,須要以下的初始化:

ThreadStart startDownload = new ThreadStart( DownLoad );

//線程起始設置:即每個線程都執行DownLoad(),注意:DownLoad()必須為不帶有參數的方法

Thread downloadThread = new Thread( startDownload ); //實例化要開啟的新類

downloadThread.Start();//開啟線程

由于線程起始時啟動的方法不能帶有參數,這就為多線程共享資源添加了麻煩。不過我們可以用類級變量(當然也可以使用其它方法,筆者以為此方法最簡單易用)來解決這個問題。知道開啟多線程下載的方法后,大家可能會發生幾個疑問:

1.如何操縱線程的數量?

2.如何防止多線程下載同一網頁?

3.如何判斷線程結束?

4.如何操縱線程結束?

下面就這幾個問題提出解決方法:

1.線程數量我們可以通過for循環來實現,就如同當年初學編程的打點程序一樣。

譬如已知用戶指定了n(它是一個int型變量)個線程吧,可以用如下方法開啟五個線程。

Thread[] downloadThread;

//聲名下載線程,這是C#的優勢,即數組初始化時,不需要指定其長度,可以在使用時才指定。

這個聲名應為類級,這樣也就為其它方法控件它們提供了可能

ThreadStart startDownload = new ThreadStart( DownLoad );

//線程起始設置:即每個線程都執行DownLoad()

downloadThread = new Thread[ n ];//為線程申請資源,確定線程總數

for( int i = 0; i < n; i++ )//開啟指定數量的線程數

{

downloadThread[i] = new Thread( startDownload );//指定線程起始設置

downloadThread[i].Start();//逐個開啟線程

}

好了,實現控制開啟線程數是不是很簡單啊?

2.下面出現的一個問題:所有的線程都調用DonwLoad()方法,這樣如何避免它們同時下載同一個網頁呢?

這個問題也好解決,只要樹立一下Url地址表,表中的每個地址只容許被一個線程申請即可。具體實現:

可以利用數據庫,樹立一個表,表中有四列,其中一列專門用于存儲Url地址,另外兩列分別存放地址對應的線程以及該地址被申請的次數,最后一列存放下載的內容。(當然,對應線程一列不是必要的)。當有線程申請后,將對應線程一列設定為當前線程編號,并將是否申請過一列設置為申請一次,這樣,別的線程就無法申請該頁。要是下載成功,則將內容存入內容列。要是不成功,內容列仍為空,作為是否再次下載的依據之一,如果反復不成功,則進程將于達到重試次數(對應當地址被申請的次數,用戶可設)后,申請下一個Url地址。好了,這樣就解決了多線程中,線程沖突。當然,去重問題也可以在C#語言內解決,只根建立一個臨時文件(文本就可以),保存所有的Url地址,差對它們設置相應的屬性即可,但查找效率可能不及數據庫快。

3.線程結束是很難判斷的,因為它總是在查找新的鏈接。用者認為可以假設:線程重復N次以后還是沒有能申請到新的Url地址,那么可以覺得它已經下載完了所有鏈接。主要代碼如下:

string url = "";

int times = 0;

while ( url == "" )//要是沒有找到符合條件的記錄,則不斷地尋覓符合條件的記錄

{

url = getUrl.GetAUrl( …… );//調用GetAUrl方法,試圖得到一個url值

if ( url == "" )//要是沒有找到

{

times ++;//嘗試次數自增

continue; //進行下一次嘗試

}

if ( times > N ) //要是已經嘗試夠了次數,則退出進程

{

downloadThread[i].Abort; //退出進程

}

else//如果沒有嘗試夠次數

{

Times = 0; //嘗試次數歸零處理

}

//進行下一步針對得到的Url的處理

}

4.這個問題相對簡單,因為在問題一中已經提議,將線程聲名為類級數組,這樣就很易于操縱。只要用一個for循環即可結束。代碼如下:

for( int i = 0; i < n; i++ )//關閉指定數量n的線程數

{

downloadThread[i].Abort();//逐個關閉線程

}

好了,一個多線程的C#程序就這樣完成了,在C#面前,它的實現本來如此簡單。

轉載于:https://www.cnblogs.com/jordan2009/archive/2009/12/21/1628572.html

總結

以上是生活随笔為你收集整理的c#实现多线程代码例子的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: h片在线免费 | 国产精品伦子伦免费视频 | 免费在线观看www | 日韩乱码一区二区 | 免费黄色小说视频 | 91久色| 九色精品| 色老汉av一区二区三区 | 经典杯子蛋糕日剧在线观看免费 | 成人tv | 根深蒂固在线观看 | 久久视频热 | 91成人在线观看国产 | 欧美日韩一区二区在线 | 亚洲视频区 | 久久国产精品久久久 | 五月天久久久久久 | 亚洲天堂美女 | 国产美女在线免费观看 | 99reav| 欧美人xxxx | 一级伦理农村妇女愉情 | 欧美做受高潮中文字幕 | 少妇久久久久久 | 国产精品自产拍 | 欧美久久激情 | 69人妻一区二区三区 | 久久叉| 亚洲男性天堂 | 在线黄色av| 男生草女生视频 | 爽好多水快深点欧美视频 | 999久久久 | 特级淫片裸体免费看 | 熟女毛片 | 成人亚洲一区二区 | 另类综合小说 | 午夜综合 | 久久av无码精品人妻系列试探 | 91视频综合网 | 免费av网址在线 | 日本美女毛片 | 亚洲妇熟xx妇色黄蜜桃 | 在线成人av | 韩国一级淫一片免费放 | 麻豆视频网址 | 波多野结衣国产 | 国产高清免费观看 | 青青草一区二区 | 国产区精品区 | 亚洲成成品网站 | 久久精品aⅴ无码中文字字幕重口 | 久久一区二区三区四区五区 | 在线永久看片免费的视频 | 黄色18网站 | 人av在线| 国产精品高潮呻吟久久久久久 | 欧美系列在线观看 | 日日摸天天添天天添破 | 久久中文字幕av | 国产精选第一页 | 久久国产成人精品av | 新版天堂资源中文8在线 | 色久网| 亚州av网 | 国产热热 | 不卡av免费 | 中文字幕 成人 | 艳妇臀荡乳欲伦交换在线看 | 嫩草导航 | 国产最新视频 | www成人啪啪18软件 | 在线观看免费黄网站 | 怡红院精品视频 | 99热这里只有精品首页 | 五月婷婷激情视频 | www夜夜| 日韩欧美一区二区三区免费观看 | 亚洲自拍偷拍一区二区三区 | 女人下边被添全过视频 | 韩国国产在线 | 日韩aaaaaa| 国产午夜亚洲精品午夜鲁丝片 | 欧美一级黄色网 | 国产原创中文av | 国产老熟女伦老熟妇露脸 | 精品人妻一区二区三区日产乱码卜 | 黄色精品视频在线观看 | 欧美日韩国产第一页 | 光溜溜视频素材大全美女 | 欧美亚洲在线播放 | 欧美午夜精品理论片a级按摩 | 中文无码熟妇人妻av在线 | 国产精品无码av在线有声小说 | 国产精品色网 | 中文字幕久久综合 | 亚洲AV成人无码电影在线观看 | 中文字幕88 | 免费在线a |