Вниз
Скачать: 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.028 c
1-1086709298
white
2004-06-08 19:41
2004.06.20
Mouse!


9-1077298936
Ser_00
2004-02-20 20:42
2004.06.20
Ссылки.


3-1085674307
JurMax
2004-05-27 20:11
2004.06.20
Изменение ширины строки в dbGrid


14-1086033510
Vasya.ru
2004-05-31 23:58
2004.06.20
распознавание старого русского языка


14-1086124772
FRick
2004-06-02 01:19
2004.06.20
Яркость монитора




   Наверх