Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Sophos
86 / 63 / 2
Регистрация: 04.01.2010
Сообщений: 265
1

Передать много параметров потоку до создания. Рефакторинг

18.07.2012, 10:47. Просмотров 902. Ответов 4
Метки нет (Все метки)

Ситуация: есть класс, который контролирует фоновый поток (TThread). Этот поток для своей работы должен знать много параметров:
Delphi
1
2
3
4
5
6
7
8
    FOutSignal       : TOutSignal;
    FTimeoutSignal   : TTimeoutSignal;
 
    FReadProcedure   : TReadProcedure;
    FCheckProcedure  : TCheckProcedure;
 
    FInquireInterval : Integer;
    FTimeoutInterval : Integer;
Однако перечисленные выше параметры в данный момент знает только класс-"хозяин" потока. В прошлой версии все эти параметры через var (в последствии через record) отсылались потоку при его Create. Но я думаю, что это плохо, потому, что происходит дублирования одних и тех же данных в памяти.

Какое решение вы можете предложить? Думаю, что передача потоку указателя на его "хозяина" тоже не хорошо, поскольку нарушает все каноны.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2012, 10:47
Ответы с готовыми решениями:

Как передать несколько параметров в функцию
Как передать несколько параметров в функцию? пытаюсь передать переменную s она...

Рефакторинг: функция с большим количеством параметров
День добрый. Скажите плз, гуру рефакторинга. Вот есть функция и в нее...

Как передать массив потоку
Добрый день. Возник вопрос, как правильно передать массив потоку? ...

Как передать параметр потоку?
Добрый день, возник вопрос как передать параметр потоку, нужно чтобы каждый...

Как передать второму потоку n строк?
Здравствуйте! Главный поток получает от пользователя n-строк с консоли,...

4
s-kvv
76 / 73 / 9
Регистрация: 09.06.2010
Сообщений: 206
18.07.2012, 13:31 2
Цитата Сообщение от Sophos Посмотреть сообщение
параметры через var (в последствии через record) отсылались потоку при его Create. Но я думаю, что это плохо, потому, что происходит дублирования одних и тех же данных в памяти.
в этом случае (через var) передается адрес на структуру. копирования самих данных не происходит
Цитата Сообщение от Sophos Посмотреть сообщение
Какое решение вы можете предложить? Думаю, что передача потоку указателя на его "хозяина" тоже не хорошо, поскольку нарушает все каноны.
Создать класс (TThreadContent например) с открытыми полями (что бы побыстрее к ним доступ был, без дополнительных вызовов) и передавать в поток указатель.
Или интерфейс создавать, в котором описаны методы получения/задания значений и в поток передавать класс, реализующий этот интерфейс. Вместо интерфейса можно абстрактный класс.
Или у класса потока создавать свойства соответствующие вашим переменным, их инициализировать перед запуском потока, а в Execute использовать поля от свойств
0
Mawrat
12830 / 5738 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
18.07.2012, 19:37 3
Цитата Сообщение от Sophos Посмотреть сообщение
Какое решение вы можете предложить? Думаю, что передача потоку указателя на его "хозяина" тоже не хорошо, поскольку нарушает все каноны.
Передача указателя на хояина - это, как раз, правильное технологическое решение. Отношение типа: объект-коллекция - объекты члены коллекции. В Delphi такой подход встречается повсеместно. - Недаром TComponent и его наследники имеют механизм, основанный на Owner (владелец). А TControl и его наследники имеют механизм, связанный с Parent и т. п.
0
Sophos
86 / 63 / 2
Регистрация: 04.01.2010
Сообщений: 265
19.07.2012, 10:34  [ТС] 4
Цитата Сообщение от Mawrat Посмотреть сообщение
Передача указателя на хояина - это, как раз, правильное технологическое решение. Отношение типа: объект-коллекция - объекты члены коллекции. В Delphi такой подход встречается повсеместно. - Недаром TComponent и его наследники имеют механизм, основанный на Owner (владелец). А TControl и его наследники имеют механизм, связанный с Parent и т. п.
Хм, а я считал, что теоретическая возможность конструкций типа: Parent.Child.Parent.Child.Parent.Child.Parent.Child.Value - это плохо.
0
Mawrat
12830 / 5738 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
20.07.2012, 10:58 5
Нормально. Если объекты входят в древовидную структуру то для полноценной работы с ней должны быть поля Parent - Childs. Это позволит перемещаться по узлам дерева. Например, в HTML DOM каждый узел имеет поле parentNode, ссылающееся на родительский элемент и коллекцию childNodes - с набором ссылок на дочерние элементы.
0
20.07.2012, 10:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2012, 10:58

Как передать файл по ssl потоку
Добрый день. Подскажите такой вопрос: как передать файл по ssl потоку в C#?...

Как передать управление другому потоку?
Всем добрый день, есть такой вопрос, не знаю как решить. В чем суть, у меня...

Как переменной потоку передать значение (параметр)
Ребята разобрался с потоками, довольно не плохая штука )), есть маленький...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru