求c#多个线程的代码~
listBox1存放代理,listBox2存放链接,以及写文件,功能是取得链接,设置代理访问链接,如果代理有错,跳下一个代理继续,如果代理无误,取得网页,则写入硬盘。这些...
listBox1存放代理,listBox2存放链接,以及写文件,功能是取得链接,设置代理访问链接,如果代理有错,跳下一个代理继续,如果代理无误,取得网页,则写入硬盘。这些功能我已经实现,单线程也搞定。但是怎么开5个线程啊?麻烦谁写个代码实例给我。我是业余学程序的,太多的理论我看不得,代码的话我还能一点一点啃掉。。。
展开
展开全部
代理是可以重用的,所以代理不管多少个线程,都可以复用,直接给线程就好了
你只需要把链接分成5份就好了
//链接
List<string> urls = new List<string>();
for (int i = 0; i < 16; i++)
{
urls.Add(i.ToString());
}
//代理
List<string> proxys = new List<string>();
//线程数
int threadCount = 5;
//计算每个线程要请求几个链接
int perCount = urls.Count / threadCount;
int rem = urls.Count % threadCount;//余数
//下面把urls分成5份
int copyIndex = 0;
for (int i = 0; i < threadCount; i++)
{
string[] perUrls = new string[perCount + (rem > i ? 1 : 0)];
urls.CopyTo(copyIndex, perUrls, 0, perUrls.Length);
copyIndex += perUrls.Length;
Thread thread = new Thread(new ThreadStart(() =>
{
foreach (var url in perUrls)
{
//在这里用你的代理列表proxys,进行请求吧
}
}));
thread.Start();
}
展开全部
List<System.Threading.Thread> lstTh = new List<System.Threading.Thread>();
for (int i = 0; i < 5; i++)
{
System.Threading.Thread th = new System.Threading.Thread(() => {
//这里调用你的方法,比如
this.GetPage();
});
lstTh.Add(th);
th.Start();
}
更多追问追答
追问
那我应该怎么分配代理,链接地址给5个线程呢?
追答
那就改造的你方法呗,比如第一个读 1-100个链接,分配第一个代理,第二个线程依次类推
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-12
展开全部
不建议直接用多线程,线程创建,销毁开销太大
如果要用多线程最好用线程池,由系统自动调度,性能更高,省资源
很经典一个是smartThreadPool
用法及介绍链接如下
http://www.codeproject.com/Articles/7933/Smart-Thread-Pool
如果要用多线程最好用线程池,由系统自动调度,性能更高,省资源
很经典一个是smartThreadPool
用法及介绍链接如下
http://www.codeproject.com/Articles/7933/Smart-Thread-Pool
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询