Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.08.2014, 17:09
dnwest dnwest вне форума
Прохожий
 
Регистрация: 06.02.2012
Сообщения: 12
Репутация: 10
По умолчанию Обращение к объектам

Господа кодеры, добрый вечер.

Хочу получить совет по нижеследующему вопросу.
Динамически создаю несколько экземпляров класса TThread, используя одну переменную. В процессе выполнения, основной поток должен обращаться к подпотокам и получать от них данные, грубо говоря, прогрессбары накручивать. Как грамотнее сделать обращение к property объектов?
Сам рассматриваю такие варианты:
- присваивать разные значения свойству name объектов, а потом по FindComponent();
- использовать для объявления объектов не одну переменную а динамический массив (думается, что тяжелый массив выйдет)
- заморочиться с RTTI. Но там вроде как нужен Sender, а он есть только в обработчиках событий.
Ответить с цитированием
  #2  
Старый 10.08.2014, 17:16
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
думается, что тяжелый массив выйдет
Сколько потоков? TThread - это указатель на объект. Сама структура выделяется динамически вне зависимости от того, сохраняется где-то результат или нет. Поэтому массив TThread-ов будет занимать по 4 байта на поток. Не думаю, что это много. У меня в системе суммарно сейчас 1600 потоков, массив под все это весил бы 6 кб. И вообще, хранить где-то выделенные объекты есть хорошая практика, потому что тогда их всегда можно удалить в случае фейлов (ексепшенов).
FindComponent - это медленно, и не факт, что вообще получится (насколько я помню, Thread - не Component).
RTTI - имхо, извращение в данном случае.
А еще можно пойти "от противного" - чтобы не главный обращался к дочерним, а дочерние накручивали какие-нибудь переменные в главном (разумеется, это должно быть обложено критическими секциями).
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 10.08.2014 в 17:21.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
dnwest (10.08.2014)
  #3  
Старый 10.08.2014, 17:28
dnwest dnwest вне форума
Прохожий
 
Регистрация: 06.02.2012
Сообщения: 12
Репутация: 10
По умолчанию

Сейчас так и есть, дочерние накручивают все общие ресурсы через Synchronization(), но прогнозирую в будущем обратную ситуацию, и хочу сразу реализовать такую возможность в коде, чтобы потом рефакторинг менее болезненно прошел. В общем, спасибо за совет.

Отвечаю на вопрос - потоков 256 максимум.

Цитата:
Сообщение от Bargest
насколько я помню, Thread - не Component
Точно ведь, он напрямую наследует TObject.

Последний раз редактировалось M.A.D.M.A.N., 11.08.2014 в 09:17.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:36.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter