![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
потоки
авыф © (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]
просто форма отображает течение какого-либо процесса, а вот сам алгоритм может быть каким угодно.