多线程的问题,请达人帮忙。
我在程序里开了五百个线程,结果在想捕捉线程结束并退出的地方遇到了问题。
我明明开了五百个线程,全都是调用同一个sub,比较长,并在退出的时候,进行了捕捉,结果我发现,启动五百个线程,结束的时候,只发现了385个是正常退出,然后程序就没动静了,也就是说,还有115个线程,自己不知道什么时候自己挂掉了!!!
我不知道如何处理了,那个sub比较长,涉及到好几种不种的操作,有网页,有数据库,就不贴出详细代码了。
我就是不明白,线程会在何种情况下,自己挂掉,对这种自己挂掉的线程,应该通过什么方法来捕捉呢。
另:在这些线程里面,为了控制一个相同的数据集,我使用了一个DO LOOP的循环来阻塞线程,这个循环是无限的,直到一个变量为TRUE才往下走,感觉会不会这里出了问题。如果是的话,应该采取何种方法来阻塞线程呢。。。。。谢谢指点。。
[解决办法]
在sub最后加个count++,看看count是多少
[解决办法]
public class WorkHelper : IDisposable
{
int totalCounts;
ManualResetEvent mre;
public WorkHelper(int totalWorkCounts)
{
mre = new ManualResetEvent(false);
totalCounts = totalWorkCounts + 1;
}
public void CountDown()
{
if (Interlocked.Decrement(ref totalCounts) <= 0)
{
mre.Set();
}
}
public void WaitAll()
{
CountDown();
mre.WaitOne();
}
#region IDisposable 成员
void IDisposable.Dispose()
{
((IDisposable)mre).Dispose();
}
#endregion
}
~~~
using(WorkHelper wh=new WorkHelper(500))
{
for(int i=0;i<500;i++)
{
ThreadPool.QueueUserWorkItem(_=>{
//bla, bla, bla....
wh.CountDown();
});
wh.WaitAll();
}
//final exit
}