我有一个PARENT线程负责执行作业,每个作业都启动一个CHILD线程来完成工作 - 但是永远不应允许它一次启动一个以上(单个孩子)。例如,在有10个工作要做的情况下,它应该一个接一个地执行 - 因此,每个工作完成后需要知道PARENT,以便它可以启动下一个待处理的工作。
通常我只会.Join()或WaitHandle来完成这项任务 - 除了在这种情况下我不能阻止Parent线程,因为它有其他在等待孩子完成时需要执行的责任...
请允许我说明:
class Parent
{
private Thread threadJob;
public Parent()
{
// this is where the main loop occurs
while (bRun)
{
// This is where I need help ... how can I know that threadJob is not currently performing a task?
// is there an event it can fire to let Parent know that it is done? A flag it can set?
if (threadJob child is not currently running a job)
{
threadJob = new Thread(new ThreadStart(PerformWork));
threadJob.IsBackground = true;
threadJob.Start();
}
.. do other work ...
.. keep doing other work ...
}
}
};
非常感谢任何帮助或建议。 谢谢,
答案 0 :(得分:2)
处理此问题的另一种方法是始终保持工作线程处于活动状态,并使其从待处理作业队列中读取。这样,您只能按顺序一次完成一个作业,但您不必担心与主线程同步。作业的输出可以进入自己的队列,主线程可以检查为空,如果没有,则检索。
修改的
更仔细地看一下你的例子,看起来线程所做的工作每次都不同,所以也许只是让线程循环而不是终止。
答案 1 :(得分:1)
如果您愿意按照问题所示有效地进行投票,则可以使用Thread.IsAlive
。