Вниз
Скачать: CL | DM;

Запуск индикатора процесса   Найти похожие ветки 

← →
_alex_   (2004-06-07 15:13) [0]

Добрый день!
У меня проблема, я запускаю функцию с математическим расчетом и хочу паралельно запустить индикатор процесса этого расчета. Как это лучше сделать?
Если в самой функции вызывать форму с индикатором, то после вызова метода ShowModal; работа функции приостанавливается и ожидается закрытие формы.


← →
KSergey ©   (2004-06-07 15:15) [1]

Отдельный поток и модальная форма с индикатором
Общаться - через сообщения, например.


← →
_alex_   (2004-06-07 15:47) [2]

Так вроде бы VCL компоненты не рекомендуется засовывать в потоки. Или у меня не верная информация?


← →
Anatoly Podgoretsky ©   (2004-06-07 15:56) [3]

Перенеси расчет в форму с индикатором, это проще всего.


← →
Erik1   (2004-06-07 16:11) [4]

"Так вроде бы VCL компоненты не рекомендуется засовывать в потоки" Можно и так сказать, если неполенишся то вынесеш расчет в отдельный клас, а с VCL будеш работать через Message. Незлоупотребляй syncronize! А лучше для начала вобще неиспользуй.


← →
_alex_   (2004-06-07 16:34) [5]

А как это решается в комерческих приложениях? Ведь индикаторы процесса используются практически в каждой второй программе.


← →
Digitman ©   (2004-06-07 16:47) [6]


> как это решается в комерческих приложениях? Ведь индикаторы
> процесса используются практически в каждой второй программе.


заметь - далеко не каждая коммерч.программа использует доп.код.потоки

но коль скоро возникла потребность в мод.форме и в расчете, выполняемом параллельно с кодом мод.формы, то доп.код.поток здесь, очевидно, - не самое худшее решение

осн.поток создает форму, получает ссылку на ее экз-р

далее осн.поток создает доп.поток. передавая ему параметром полученную ссылку на экз-р формы

далее осн.поток визуалилизирует модально созданную форму

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


← →
BFG9k   (2004-06-08 11:50) [7]

Это христоматийный пример. Именно он описан в книге В.В. Фаронова - Delphi4 УЧЕБНЫЙ (!) курс.


← →
vox ©   (2004-06-08 14:55) [8]

Если время расчёта не очень большое (<1 минуты), то заморачиваться с потоками думаю не стоит. Просто покажи форму перед расчётом через visible (зачем ShowModal ???) и спрячь после. Делать модальную форму незачем - всё равно на время расчётов всё подвиснет.


← →
_alex_   (2004-06-09 11:37) [9]

> Digitman ©   (07.06.04 16:47) [6]

Все таки хотелось бы создать что то универсальное, что бы можно было вставлять и в другие программы с минимальными переделками. Если использовать потоки, а если в функции будут задействованы VCL-компонет (у меня был такой пример) - опять получаются проблемы.
Может действительно не стоит использовать ShowModal, как посоветовал vox?
А если индикатор поместить в отдельное приложение общаться с ним используя, например события или сообщения?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.02 c
4-1084362767
cdsvalik
2004-05-12 15:52
2004.06.20
Как редактировать в Delphi exe файл?


1-1086264193
Прямой
2004-06-03 16:03
2004.06.20
Панельку надо


3-1085526186
Игорь
2004-05-26 03:03
2004.06.20
Помогите разобраться с SQL запросом. Спасибо


1-1086426640
Maxud
2004-06-05 13:10
2004.06.20
Ошибка при проверке типа


3-1085722879
Смертник
2004-05-28 09:41
2004.06.20
Помогите пожалуйста с DBGrid.




   Наверх