繁体   English   中英

单个子线程通知父级以指示其已完成,以便父级可以启动另一个子级[C#]

[英]Single Child thread notifying Parent to indicate that it is finished so Parent can launch another child [C#]

我有一个PARENT线程负责执行作业,每执行一个作业,它都会启动一个CHILD线程来执行该工作-但是,永远不允许一次启动一个以上的线程(一个孩子)。 例如,在有10个工作要做的情况下,应一个接一个地做-因此,需要知道每个作业何时完成,以便可以启动下一个待处理的工作。

通常,我只需要.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 ...

        }
    }
};

任何帮助或建议,将不胜感激。 谢谢,

处理此问题的另一种方法是使工作线程始终保持活动状态,并从待处理作业队列中读取它。 这样,您一次只按顺序执行一项工作,但是您不必担心与主线程同步。 作业的输出可以进入自己的队列,主线程可以检查该队列是否为空,如果不是,则从队列中检索。

编辑

更仔细地查看您的示例,似乎每次线程所做的工作似乎都不相同,因此也许只是让线程循环而不是终止。

如果您愿意按照问题所示进行有效轮询,则可以使用Thread.IsAlive

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM