Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.034 c
1-1121153857
Руслана
2005-07-12 11:37
2005.07.31
Подскажите по меню пожалуйста


6-1113911899
juice
2005-04-19 15:58
2005.07.31
TIDPOP3


1-1121090924
webpauk
2005-07-11 18:08
2005.07.31
Глюки с закрытием приложения


3-1118918229
DelphiN!
2005-06-16 14:37
2005.07.31
SQL отнимающий содержимое одной строки от другой


3-1119527686
stud
2005-06-23 15:54
2005.07.31
прошу помощи составить запрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский