![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как создать динамический массив потоков ? [D7, WinXP]
JohnSmith © (2005-07-14 03:32:00)Необходимо держать массив потоков, причем колво этих потоков может изменяться. Как это можно реализовать ?
Просто Джо (2005-07-14 19:30:00) [1]
> [7] atruhin © (14.07.05 19:14)
Если так, то нормально. Однако, внешний менеджер имеет ряд преимуществ, когда нужно централизовано управлять потоками. Например заморозить все потоки можно было бы вызовом гипотетического метода Manager.SuspendAll или в аналогичных случаях. Кроме того, мы скрыли бы информацию о том, где и каким образом хранятся потоки. Это знал бы только менеджер. Сами потоки, по моему, идеологически не должны знать ни о каких списках и, тем более, о других потоках.
Именно поэтому, имхо, есть куча готовых написанных пулов и менеджеров потоков, см. [6] Eraser.
atruhin (2005-07-14 19:14:00) [2]>>MyThread := TMyThread.Create (True);
>>FGlobalList.Add(MyThread);
Я писал: поток себядобовляет, при завершении удаляет
Eraser (2005-07-14 16:01:00) [3]JohnSmith
Существует масса готовых решений управления потоками. Даже в JEDI целая вкладка есть. Так же в сети полно примеров всяких пулов.
Просто Джо (2005-07-14 15:55:00) [4]
> TThreadManager.NewThread (True);
читать как
ThreadManager.NewThread (True);
Просто Джо (2005-07-14 15:53:00) [5]
> [2] atruhin © (14.07.05 07:55)
> А почему? Чем обычный TList плох?
Да вот хотя бы тем, что
> При создании поток себя добовляет, при завершении удаляет.
Как минимум, происходит дублирование кода. Сравни
MyThread := TMyThread.Create (True);
FGlobalList.Add(MyThread);
(Тебе придется вызывать это в каждом месте кода, где потребуется создать новый поток).
и
TThreadManager.NewThread (True);
При этом, метод NewThread будет добавлять созданный поток в свой список (FObjectList: TObjectList) и, при необходимост, выполнять еще какие-то действия.
Это всего лишь один пример.
Digitman (2005-07-14 08:06:00) [6]
> Необходимо держать массив
ну и держи его на здоровье !
какие проблемы ?
atruhin (2005-07-14 07:55:00) [7]>>Просто Джо © (14.07.05 04:32) [1]
А почему? Чем обычный TList плох? При создании поток себя добовляет, при завершении удаляет.
Просто Джо (2005-07-14 04:32:00) [8]Хоть создать динамический массив для этой цели кажется довольно легким и привлекательным методом - лучше так не делай. В дальнейшем замучаешься. ИМХО, разумней создать отдельный класс-менеджер объектов, производных от TThread. Пусть он и создает экземпляры потоков, сохраняет в своем внутреннем списке ссылки на них, следит за ними и уничтожает при необходимости.