Форум: "Основная";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];
ВнизЗапуск индикатора процесса Найти похожие ветки
← →
_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 вся ветка
Форум: "Основная";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c