Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выполнения потока в зависимости от типа задачи, Вопрос может нубский, по всеж 
:(
    Опции темы
Mifody
Дата 24.6.2011, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.8.2008

Репутация: нет
Всего: 2



Всем доброго времени суток.
Интересует экспертный (ну может и не совсем) совет smile.
Пишу отправлялку картинок на хостинги.
Итак, дано:
1. есть несколько классов, выполняют почти одинаковую работу. Сами действия довольно емкие по времени и в обычном режиме (если выполнять в основном потоке программы) подвешивают форму.
2. для избавления зависаний вынес вызов методов классов в отдельный поток, наследник TThread. С этой частью все Ок.

Что мне пока не нравится. У классов есть несколько методов, которые выполняют разные действия (авторизация, проверка списка картинок, отправка картинок). Т.е. некоторые действия производятся не зависимо от типа работы, некоторые зависят от типа работы.
Сейчас у меня, к примеру, получаются три класса потока, которые за небольшим исключением повторяют друг друга. Очень хочется свести все в один класс (дабы, если возникнет необходимость, не пришлось менять код нескольких потоков, а такая необходимость возникнет из-за особенностей защиты программы).
Какое решения мне видятся "в лоб": завести переменную в классе, типа "ТипЗадания" и в методе execute в зависимости от ее значения по условию выполнять действие. В таком случае, код метода получается довольно громоздкий :(.

Есть еще какие более "изящьные" методы решения???

Если что не понятно написал (хоть я и попытался максимально описать) спрашивайте smile.
PM MAIL WWW   Вверх
AKATAN
Дата 24.6.2011, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 30.9.2008
Где: Украина

Репутация: 1
Всего: 1



Цитата

Очень хочется свести все в один класс

Так и сведи в один класс.
Сделай потомки, и не будет у тебя море копипастного кода.

Не вижу проблемы.
PM MAIL ICQ   Вверх
Dik0n
Дата 24.6.2011, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 11.5.2011

Репутация: 2
Всего: 10



Цитата(Mifody @  24.6.2011,  18:04 Найти цитируемый пост)
Сейчас у меня, к примеру, получаются три класса потока, которые за небольшим исключением повторяют друг друга

Использовать наследование и будет тебе счастье.

Заводим базовый класс, в котором описываем общий функционал, а остальные классы наследуем от него.

Код

Base = class(TThread)
end;

MyClass = class(Base)
end;


Это сообщение отредактировал(а) Dik0n - 24.6.2011, 19:11
--------------------
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ◄◄◄ Сотри монеткой защитный слой
PM MAIL WWW   Вверх
Mifody
Дата 28.6.2011, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.8.2008

Репутация: нет
Всего: 2



ммм, наверное я не совсем понятно объяснил :(.
То, что мне надо использовать в разных задачах (отправка событий, даже методы создания и уничтожения) я и сделал через базовый класс.

Вообщем наводящий вопрос/уточнение:
При запуске потока выполняется метод Execute? правильно? именно он у меня НЕМНОГО разный для разных задач. У меня вообще, в классах потоков присутствует только реализация этого метода, все остальное (благо хоть это получилось унифицировать) вынесено в базовый класс.
PM MAIL WWW   Вверх
Snowy
Дата 28.6.2011, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Ну сделай декомпозицию Execute.
Создай разные методы для каждогой задачи, а в Execute просто вызывай нужный.
Совсем не обязательно всё класть в один метод. Разложи на несколько.
PM MAIL   Вверх
cat512
Дата 30.6.2011, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 7
Всего: 15



Шаблон Strategy - это называется. У меня для таких вещей обычно присутствует перекрытый класс трэда, трэд - лоджик и трэд-мэнэджер который, отвечает за конфигурацию, создание, разрушение "заданий" Трэд лоджик - реадизует саму логику "работы", ну а трэд выполняет конкретную логику, сконфигуренную в трэд - мэнэджере. Плюсы - не надо заботиться о корректном создании./разрушении потоков (особенно когда классы трэдов со временем "обрастают"), относительно гибкое распараллеливание задач. Минусы - относительная сложность, которая, будучи раз реализованная, экономит кучу времени

Это сообщение отредактировал(а) cat512 - 30.6.2011, 22:41
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0737 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.