Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2016, 18:12   #1
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию Поток запускает несколько потоков

Привет.

Есть поток "А" - не главный, который запускает еще 10 потоков и при завершении каждого из них в событии OnTerminate инициируется создание нового потока, в случае, если необходимо обработать еще данные. Таким образом их в работе будет постоянно 10 до полного выполнения всех задач.

Эта схема идеально работает в случае, если поток "А" будет главным. Иначе, поток "А" завершается после запуска этих 10 потоков и дальнейшая их обработка в этом потоке невозможна.

Прошу помочь советом.
bilibian вне форума Ответить с цитированием
Старый 20.08.2016, 18:42   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Контролировать количество потоков можно и другим способом. Например, поток А крутится в бесконечном цикле WaitForMultipleObjects для 10 потоков (или семафорами можно организовать). В этом случае поток А умрёт только после завершения всех дочерних.
eoln вне форума Ответить с цитированием
Старый 21.08.2016, 00:59   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

А TThreadList не поможет в данном случае?
northener вне форума Ответить с цитированием
Старый 21.08.2016, 11:30   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Как хранилище потоков? Да ради бога. Это потомок обычного TList, только заточенный для потоков.

Цитата:
Иначе, поток "А" завершается после запуска этих 10 потоков и дальнейшая их обработка в этом потоке невозможна.
В любом случаю потоку А нельзя завершаться, если нужно чтобы он как-то контролировал потоки.
Цитата:
А TThreadList не поможет
Можно и так. Пусть потоки сами себя удаляют из TThreadList при завершении (это для случае если не хочется ждать их через WaitForMultipleObjects и другие подобные механизмы), а поток А крутит бесконечный цикл в котором проверяет количество потоков, и если их меньше 10, то добавляет новый поток (если он есть). В цикле придётся вставлять что-то тормозящее типа Sleep иначе системные ресурсы сильно съедаться будут.

Но в этом случае будет сложно определить отработал ли потомок потока А правильно или аварийно завершился. Плюс сложно будет контролировать зависание потока (можно калбек прикрутить, но это ИМХО будет не очень красиво)
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поток vs пул потоков wanes101 Общие вопросы .NET 4 10.07.2013 21:15
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24
Логгирование, несколько потоков pa6kevi4 Общие вопросы .NET 3 12.06.2010 22:32
Несколько потоков Adm Общие вопросы Delphi 13 18.01.2008 20:04
Дескрипторы потоков - Для каждого элемента списка необходимо создать поток, выполняющий требуемые функции kdv0403 Общие вопросы Delphi 2 09.06.2007 11:12