我正在尝试使用ManualResetEvent
来验证我ThreadPool
中的所有主题是否都已完成。但根据http://msdn.microsoft.com/en-us/library/3dasc8as(v=vs.80).aspx,我需要拥有与线程一样多的线程类实例,这样我就可以在每个类中都有一个ManualResetEvent
变量,并在线程完成时设置它。
如果我只有一个线程类实例并且必须检查执行该实例的函数的所有线程是否都已完成,该怎么办?
答案 0 :(得分:1)
一个想法可能是使用Interlocked:当你输入函数时使用互锁增量和类的静态变量,当函数完成时使用Interlocked.Decrement。当你达到零时,你知道没有更多的功能正常工作。
答案 1 :(得分:1)
如果您可以知道/确定将执行的线程数,您可以在该类中使用计数器,然后在计数器达到预期数量后设置单个ManualResetEvent。
答案 2 :(得分:0)
ThreadPool的工作原理如下:如果作业完成,则将新作业分配给已创建的线程。我真的不知道是否会引发这个事件 - 你可以做一个简单的测试。然而,你将不得不知道有多少工作,如果这个机制不起作用,那么你可以简单地创建自己的工作..