Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.31;
Скачать: CL | DM;

Вниз

Как создать динамический массив потоков ?   Найти похожие ветки 

 
JohnSmith   (2005-07-14 03:32) [0]

Необходимо держать массив потоков, причем колво этих потоков может изменяться. Как это можно реализовать ?


 
Просто Джо ©   (2005-07-14 04:32) [1]

Хоть создать динамический массив для этой цели кажется довольно легким и привлекательным методом - лучше так не делай. В дальнейшем замучаешься. ИМХО, разумней создать отдельный класс-менеджер объектов, производных от TThread. Пусть он и создает экземпляры потоков, сохраняет в своем внутреннем списке ссылки на них, следит за ними и уничтожает при необходимости.


 
atruhin ©   (2005-07-14 07:55) [2]

>>Просто Джо ©   (14.07.05 04:32) [1]
А почему? Чем обычный TList плох? При создании поток себя добовляет, при завершении удаляет.


 
Digitman ©   (2005-07-14 08:06) [3]


> Необходимо держать массив


ну и держи его на здоровье !
какие проблемы ?


 
Просто Джо ©   (2005-07-14 15:53) [4]


>  [2] atruhin ©   (14.07.05 07:55)
> А почему? Чем обычный TList плох?

Да вот хотя бы тем, что
> При создании поток себя добовляет, при завершении удаляет.
Как минимум, происходит дублирование кода. Сравни

MyThread := TMyThread.Create (True);
FGlobalList.Add(MyThread);

(Тебе придется вызывать это в каждом месте кода, где потребуется создать новый поток).
и
TThreadManager.NewThread (True);
При этом, метод NewThread будет добавлять созданный поток в свой список (FObjectList: TObjectList) и, при необходимост, выполнять еще какие-то действия.
Это всего лишь один пример.


 
Просто Джо ©   (2005-07-14 15:55) [5]


> TThreadManager.NewThread (True);

читать как
ThreadManager.NewThread (True);


 
Eraser ©   (2005-07-14 16:01) [6]

JohnSmith

Существует масса готовых решений управления потоками. Даже в JEDI целая вкладка есть. Так же в сети полно примеров всяких пулов.


 
atruhin ©   (2005-07-14 19:14) [7]

>>MyThread := TMyThread.Create (True);
>>FGlobalList.Add(MyThread);
Я писал:  поток себя добовляет, при завершении удаляет


 
Просто Джо ©   (2005-07-14 19:30) [8]


> [7] atruhin ©   (14.07.05 19:14)

Если так, то нормально. Однако, внешний менеджер имеет ряд преимуществ, когда нужно централизовано управлять потоками. Например заморозить все потоки можно было бы вызовом гипотетического метода Manager.SuspendAll или в аналогичных случаях. Кроме того, мы скрыли бы информацию о том, где и каким образом хранятся потоки. Это знал бы только менеджер. Сами потоки, по моему, идеологически не должны знать ни о каких списках и, тем более, о других потоках.
Именно поэтому, имхо, есть куча готовых написанных пулов и менеджеров потоков, см. [6] Eraser.



Страницы: 1 вся ветка

Текущий архив: 2005.07.31;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.046 c
14-1120635843
Juice
2005-07-06 11:44
2005.07.31
Средства адм. винды


14-1121059952
Ricko
2005-07-11 09:32
2005.07.31
Остаться в живых


1-1121075272
gar_sa
2005-07-11 13:47
2005.07.31
TWordApplication


14-1120484396
Sergey_Masloff
2005-07-04 17:39
2005.07.31
Опрос. У Вас дома есть книги? Ну хотя-бы колобок и курочка ряба?


14-1121092567
Dimedrol
2005-07-11 18:36
2005.07.31
Как увидеть сообщение об ошибке проги в WinXP ?