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

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

потоки и progressbar [D7, WinXP]


lehich ©   (2005-05-23 11:00:00) 

чего-то совсем туго у меня с потоками... не могу разобраться...
кому не сложно киньте код чтобы в потоках обрабатывалась процедура например testproc1 и в другом потоке testproc2...

Заранее премного благодарен!


GuAV   (2005-05-23 18:15:00) [1]

> begin...end ©   (23.05.05 17:52) [11]
В смысле,
with TSelectionSort.Create(SelectionSortBox, SelectionSortArray) do
поток создан и пошел работать, завершился, освободился,
OnTerminate := ThreadDone;
а тут мы используем свойство уже возможно несуществующего класса.


GuAV   (2005-05-23 18:15:00) [2]

[12] ага


begin...end   (2005-05-23 18:14:00) [3]

> GuAV ©   (23.05.05 17:31) [10]

Ты намекаешь на возможность AV при обращении к свойству OnTerminate объекта, т.к. не исключена вероятность того, что он (объект) к моменту исполнения второй строки уже будет освобождён?


begin...end   (2005-05-23 17:52:00) [4]

> GuAV ©   (23.05.05 17:31) [10]

В смысле?


GuAV   (2005-05-23 17:31:00) [5]


>  with TSelectionSort.Create(SelectionSortBox,
>SelectionSortArray) do
>    OnTerminate := ThreadDone;


Не криво ли это, с учётом FreeOnTerminate := True; в конструкторе ?


Digitman   (2005-05-23 16:40:00) [6]


> lehich ©   (23.05.05 16:33) [8]


> в одной из процедур осуществляется работа прогрессбара


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

обрати на это самое серьезное внимание - где, как и почему именно здесь и именно так используется метод Synchronize()


lehich   (2005-05-23 16:33:00) [7]


> Digitman ©   (23.05.05 15:32) [6]

респект! спасибо огромное!


> Anatoly Podgoretsky ©   (23.05.05 15:38) [7]

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


Anatoly Podgoretsky   (2005-05-23 15:38:00) [8]

А где здесь progressbar кроме заголовка?


Digitman   (2005-05-23 15:32:00) [9]


> зачем там введена
> ThreadsRunning: Integer;


счетчик кол-ва создаваемых (работающих) потоков


> что за циклы while в
> procedure TThreadSortForm.StartBtnClick(Sender: TObject);


нет там никаких циклов, в этой процедуре
там есть оператор with


> OnTerminate := ThreadDone;


в дан.контексте строчки вида

 with TSelectionSort.Create(SelectionSortBox, SelectionSortArray) do
   OnTerminate := ThreadDone;

в переводе на великий-могучий означают :

для созданного объекта класса TSelectionSort назначить в качестве метода-обработчика события OnTerminate метод ThreadDone текущего класса, т.е. TThreadSortForm


> что значит это:
> FreeOnTerminate


это значит, что сразу за завершением работы метода TТакойТоThread.Execute в контексте ЭТОГО ЖЕ потока будет вызван метод TТакойТоThread.Free, который автоматически разрушит экз-р класса TТакойТоThread, в конструкторе которого ЭТОТ поток (как ОС-объект) собственно и был создан


evvcom   (2005-05-23 15:07:00) [10]


> что значит в этих циклах:
> OnTerminate := ThreadDone;

ThreadDone - обработчик события OnTerminate.

FreeOnTerminate := True; - самоубийство объекта потока

Мне кажется, что рановато тебе еще потоками заниматься.


lehich   (2005-05-23 14:40:00) [11]

да нифига не понимаю... зачем там введена
ThreadsRunning: Integer;
что за циклы while в
procedure TThreadSortForm.StartBtnClick(Sender: TObject);
что значит в этих циклах:
OnTerminate := ThreadDone;
что значит это:
FreeOnTerminate

сорри за беспокойство...


Digitman   (2005-05-23 12:04:00) [12]


> не понимаю


чтоне понимаешь ? конкретно ..


lehich   (2005-05-23 11:55:00) [13]

смотрел уже... не понимаю... :-(((


Digitman   (2005-05-23 11:02:00) [14]

(%DELPHI)\demos\threads\thrddemo.dpr


Наверх

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