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); });}
比如说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); });}
for(var i=0;i<5,i++){ var j=i; ThreadPool.QueueUserWorkItem(h=> { call(j); });}