Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.034 c
6-1083244244
Безнадежный Чайник
2004-04-29 17:10
2004.06.20
Как отправить данные формы?


4-1084300625
ipavels
2004-05-11 22:37
2004.06.20
Обновить конфигурацию оборудования


1-1086669113
Анатолий
2004-06-08 08:31
2004.06.20
BDE снесли без унинстала, как его удалить из реестра?


3-1085667512
DimonNew
2004-05-27 18:18
2004.06.20
Фильтр по измененным записям


14-1085969840
Думкин
2004-05-31 06:17
2004.06.20
С днем рождения! 30 мая





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский