Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

потоки


Страницы:   1 2

авыф ©   (2007-12-05 15:19:00) 

Всем доброго дня.
Нужно сделать базовый класс, содержащий форму и поток. Т.е. форма будет одна и та же, а метод потока будет переопределятся. Так вообще можно? Допустим Execute потока вызывает какой-нибудь виртуальный метод формы, который потом и переопределяется. Подскажите, кто знает, а то я никогда с потоками дела не имел.


Slym   (2007-12-06 13:33:00) [1]

У меня есть компонентка самописная... Поточный прогресбар...
могу привести код... но длинный


авыф   (2007-12-06 12:56:00) [2]

Ну, посоветуйте же, что почитать про паттерны!


авыф   (2007-12-06 12:27:00) [3]


> Можешь использовать паттерн Visitorи передавть в форму
> посетителя, который и выполнит действия, а выводить прогресс
> будет в форму(он ей получит при запуске) — это вариант 2.
>

Где бы почитать про Visitor'а и со-товарищи?


авыф   (2007-12-05 17:25:00) [4]

Всем спасибо


Palladin   (2007-12-05 16:15:00) [5]

:) эт точно


Сергей М.   (2007-12-05 16:15:00) [6]


> Palladin ©   (05.12.07 16:12) [20]
> ну в принципе ни кто не мешает в классе потока его в public
> вытащить


Никто. Но дурней затеи не придумать)


Сергей М.   (2007-12-05 16:14:00) [7]

Судя по


> ты хочешь построить форму визуализации для отображения прогресса
> исполнения любого алгоритма?


> да


достаточно:

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

- объявить и реализовать в классе формы метод с таким прототипом

- создать класс TXXXThread, предусмотрев в его конструкторе параметр, соответствующий вышеозначенному прототипу

- в ходе и работы метода TXXXThread.Execute в нужный момент вызывать переданный в конструкторе метод, при необходимости синхронизируя его вызов с осн.потоком, например, средствами метода Synchronize


Palladin   (2007-12-05 16:12:00) [8]

о мля... где то b не закрыл...


Palladin   (2007-12-05 16:12:00) [9]


> Сергей М. ©   (05.12.07 15:58) [16]

ну в принципе ни кто не мешает в классе потока его в public вытащить


> авыф   (05.12.07 16:01) [17]

при таком раскладе форме действительно нафиг не нужно ничего знать о потоке... главное любому классу потока, который занимается определенной задачей, любойпередать объект формы которая обладает заявленным функционалом, грубо говоря набором методов для визуализации прогресса, и уже в TThread.Execute алгоритм потока сам решает когда и какие методы формы использовать...


Kolan   (2007-12-05 16:08:00) [10]

Сделай чтобы процесс был вне формы, а форма служила только для отображения. — Это выриант 1

Можешь использовать паттерн Visitor и передавть в форму посетителя, который и выполнит действия, а выводить прогресс будет в форму(он ей получит при запуске) — это вариант 2.

Я бы выбрал 2


Сергей М.   (2007-12-05 16:02:00) [11]


> авыф   (05.12.07 15:57) [15]


А зачем форме что-то знать про класс потока ?


авыф   (2007-12-05 16:01:00) [12]

Мне-то что делать?


Сергей М.   (2007-12-05 15:58:00) [13]


> и вызывать через неё Synchronize из метода формы


Метод Synchronize защищенный, его вызов возможен только в контексте методов класса-наследника TThread.


авыф   (2007-12-05 15:57:00) [14]


> Сергей М. ©   (05.12.07 15:50) [10]

це класс унаследованный от TThread, одним из свойств которого, является наследник от TForm. А хошь наоборот. Пойде?


авыф   (2007-12-05 15:55:00) [15]


> Palladin ©   (05.12.07 15:52) [11]

да


> Григорьев Антон ©   (05.12.07 15:53) [12]

можно на пальчиках?


Palladin   (2007-12-05 15:55:00) [16]


> Григорьев Антон ©   (05.12.07 15:53) [12]

это естественно, но сейчас подождем ответа на мой вопрос, может все можно сделать гораздо проще


Григорьев Антон   (2007-12-05 15:53:00) [17]


> Palladin ©   (05.12.07 15:33) [4]
> а с этим еще хуже, так как, сам понимаешь, TThread.Synchronize
> в методе формы доступен не будет

Значит, в классе TMyForm нужно предусмотреть ссылку на создавший форму TThread, при создании формы правильно инициализировать эту ссылку, и вызывать через неё Synchronize из метода формы.


Palladin   (2007-12-05 15:52:00) [18]


> авыф   (05.12.07 15:49) [9]

то есть, грубо говоря, ты хочешь построить форму визуализации для отображения прогресса исполнения любого алгоритма?


Сергей М.   (2007-12-05 15:50:00) [19]


> еще и кнопку туда хочу


Да хоть скрепку канцелярскую)

Но сначала дай своё подробное толкование фразы "класс, содержащий форму и поток" ..


авыф   (2007-12-05 15:49:00) [20]


> Palladin ©   (05.12.07 15:46) [7]

просто форма отображает течение какого-либо процесса, а вот сам алгоритм может быть каким угодно.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо