when parent thread sleep does sub threads also sleep?

когда родительский поток спит, подчиненные потоки тоже спят?

Теперь главный поток - это пользовательский интерфейс Я создаю 20 подпотоков внутри основного потока с фабрикой задач (назовем ее threads 2). Внутри этих 20 подпотоков я создаю еще 10 подпотоков опять же с фабрикой подпотоков (назовем их потоками 3)

Теперь внутри этих потоков 2 у меня есть бесконечный цикл. Внутри бесконечного цикла проверяется, завершен ли поток 3 или нет. Если он завершен, то уничтожаем завершенный поток и запускаем другой. Я использую 250 мс sleep для каждой проверки внутри бесконечного цикла while. Таким образом, когда поток 2 находится в спящем режиме, поток 3 также находится в спящем режиме или они независимы. Вот код, который вы можете увидеть.

while (true)
{
    int irActiveThreadCount = 0;
    int irFinishedLast = -1;

    for (int i = 0; i < irPerMainSiteThreadCount; i++)
    {
        if (MainSitesTaskList[irWhichMainTask, i] == null)
        {
            irFinishedLast = i;
            break;
        }
        if (MainSitesTaskList[irWhichMainTask, i].IsCompleted == true)
        {
            irFinishedLast = i;
            break;
        }
    }

    for (int i = 0; i < irPerMainSiteThreadCount; i++)
    {
        if (MainSitesTaskList[irWhichMainTask, i] != null)
            if (MainSitesTaskList[irWhichMainTask, i].IsCompleted == false)
            {
                irActiveThreadCount++;
            }
    }

    if (irFinishedLast > -1)
    {
        var newTask = Task.Factory.StartNew(() =>
        {
            fcStartSubPageCrawl(srMainSiteURL, srMainSiteId, irWhichMainTask);
        });
        lock (lockerMainSitesArray)
        {
            if (MainSitesTaskList[irWhichMainTask, irFinishedLast] != null)
                MainSitesTaskList[irWhichMainTask, irFinishedLast].Dispose();
            MainSitesTaskList[irWhichMainTask, irFinishedLast] = newTask;
        }
    }

    Thread.Sleep(250);

    srQuery = "myquery";
    using (DataSet dsTemp = DbConnection.db_Select_Query(srQuery))
    {
        if (dsTemp != null)
            if (dsTemp.Tables.Count > 0)
                if (dsTemp.Tables[0].Rows.Count == 0)
                {
                    break;
                }
    }
}
6
задан ebb 22 October 2011 в 14:18
поделиться