Вниз
Скачать: 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.981 c
1-1086540464
AndersoNRules
2004-06-06 20:47
2004.06.20
Peregon typedef ---> record


10-1012977852
Matushkin
2002-02-06 09:44
2004.06.20
CORBA сразу и клиент и сервер возможен?


14-1086333700
Baks
2004-06-04 11:21
2004.06.20
Из рубрики Знаменательная математика2


1-1086629822
Алексей________
2004-06-07 21:37
2004.06.20
Проблема с ToolButton


11-1075639173
Vladimir Kladov
2004-02-01 15:39
2004.06.20
замена sysdcu для D4 - by Thaddy de Koning




   Наверх