读书人

FOR循环中创办线程池

发布时间: 2013-07-01 12:33:04 作者: rapoo

FOR循环中创建线程池
在for 循环中通过ThreadPool.QueueUserWorkItem创建几个线程去处理任务
问题是:
在循环NEXT每次执行时,本次创建的线程是否已全部结束,如果不是,如何手动结束


Thanks guys

我是业余编程爱好者,问的不专业还请谅解 线程池
[解决办法]

引用:
Quote: 引用:

比如说i从0到5
我用threadPool 调一个函数download(),其实download()结束我是有标志的,(我的理解是,download结束,线程也就结束了)然后在FOR 循环的末尾我会判断是否每个线程的download()结束标志都是TRUE,然后才NEXT,
但这样发现有时候,i=2 时, download()中的某些局部变量的值仍保持着i=1时的值
不知为何

这是多线程编程时一个最容易犯的错误。这说明你的两个线程中的过程共享了相同的变量。通常在编程设计时,你应该为每一个线程复制此变量值得副本,然后传给程序执行。例如
for(var i=0;i<5,i++)
{
ThreadPool.QueueUserWorkItem(h=>
{
call(i);
});
}

这显然就是乱的。因为它们共享了i,会造成重复。你需要修改为
for(var i=0;i<5,i++)
{
var j=i;
ThreadPool.QueueUserWorkItem(h=>
{
call(j);
});
}

读书人网 >C#

热点推荐