Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не получается сделать свой ProgressBar 
:(
    Опции темы
ama_kid
Дата 17.1.2008, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 9
Всего: 95



Цитата(EKoshelev @  17.1.2008,  16:47 Найти цитируемый пост)
Ну и чё? Получается, что если у меня процедурь пашет... ну скажем... минуты три, то параллельно с ней без Application.ProcessMessages; ничего не запустить?
Запускай сколько твоей душе угодно, любые рассчетные задачи и они будут работать нормально, но не надо "вешать" саму VCL. И дельфи тут вообще не причем, на WinAPI с такими зацикливаниями в основном потоке ты получишь то же самое...



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
MetalFan
Дата 17.1.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(EKoshelev @  17.1.2008,  16:47 Найти цитируемый пост)
имхо, тему я понятно сформулировал

вот именно, что нифига не понятно!

я ж тебе пример дал - что в нем тебя не устраивает?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
EKoshelev
Дата 18.1.2008, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 509
Регистрация: 1.9.2004

Репутация: нет
Всего: нет



ama_kid, что значит "не надо "вешать" саму VCL"?


MetalFan
1.
Попробую ещё раз объяснить что мне надо. Я работаю с БД не запросами, а через длл, которая в себе эти запросы реализует. Одна ф-я (ну там какой-нить поиск) может выполняться несколько минут. Я хобтел бы чтобы эти несколько минут по отдельно созданному окошку бегал градиент. Ну и при выполнении того же цикла не охота постоянно вызывать Application.ProcessMessages.

Надеюсь, теперь немного понятнее.

2. 
Твоё решение хорошее. Но я бы хотел запустить его на отдельном окошке. При попытке сделать это нарвался на проблемы, описанные выше. Товарищ ama_kid по моей просьбе сдлал так чтобы моя прога заработала, но мне не понравился в ней Application.ProcessMessages, т. к. если я буду исполнять метод, который работает три минуты - бар остановится на те же три минуты...


--------------------
Вежливым и адекватным предлагаю общаться на "ты".
PM MAIL   Вверх
ama_kid
Дата 18.1.2008, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 9
Всего: 95



Цитата(EKoshelev @  18.1.2008,  09:44 Найти цитируемый пост)
Попробую ещё раз объяснить что мне надо. Я работаю с БД не запросами, а через длл, которая в себе эти запросы реализует. Одна ф-я (ну там какой-нить поиск) может выполняться несколько минут. Я хобтел бы чтобы эти несколько минут по отдельно созданному окошку бегал градиент. Ну и при выполнении того же цикла не охота постоянно вызывать Application.ProcessMessages.
Если твоя функция работает несколько минут в контексте основного потока - то у тебя при её вызове зависнет не только окно прогресс-бара, но и основное приложение, вызвавшее эту функцию (не важно, в dll она находится или нет) ибо на время выполнения функции остановится основной цикл выборки сообщений приложения. Вывод - тебе надо запускать твою функцию в отдельном потоке, предварительно определив callback-функции для прогресса  и завершения твоей "долгой" процедуры и вызывая их её контексте...
Цитата(EKoshelev @  18.1.2008,  09:44 Найти цитируемый пост)
ama_kid, что значит "не надо "вешать" саму VCL"?
Это как раз и значит - останавливать основной цикл выборки сообщений приложения...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
EKoshelev
Дата 18.1.2008, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 509
Регистрация: 1.9.2004

Репутация: нет
Всего: нет



ama_kid, понял всё кроме фразы
Цитата
предварительно определив callback-функции для прогресса  и завершения твоей "долгой" процедуры и вызывая их её контексте...

Щё такое колбак-функция?
Ну и, признаццо, с точки зрения русского языка эта часть мессаги не очень ясна...



--------------------
Вежливым и адекватным предлагаю общаться на "ты".
PM MAIL   Вверх
ama_kid
Дата 18.1.2008, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 9
Всего: 95



EKoshelev
в данном случае под callback-функциями я подразумевал функции основного потока, которые будут вызываться из порождённого потока. Т.е. при создании потока "долгой" процедуры ты ему передаёшь адреса твоих функций, а во время работы вызываешь их в соответствующие моменты. Для простоты я имею ввиду только две функции - та, которая будет вызываться после завершения каждого шага (допустим, отображение процента завершения) и та, которая будет вызываться после завершения операции целиком (приём\передача финальных данных). Ну и, ессно, не забывать про синхронизацию при их вызове


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
MetalFan
Дата 18.1.2008, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(ama_kid @  18.1.2008,  13:56 Найти цитируемый пост)
та, которая будет вызываться после завершения каждого шага (допустим, отображение процента завершения) и та, которая будет вызываться после завершения операции целиком (приём\передача финальных данных)

что-то опять путаница получается!
если ты будешь отдавать в кач.колбэков функции, которые будут что-то менять в объектах VCL основной нити, то это не есть хорошо.

Цитата(ama_kid @  18.1.2008,  13:56 Найти цитируемый пост)
Ну и, ессно, не забывать про синхронизацию при их вызове 

если ты про метод TThread.Synchonize, то смысл доп.нити теряется полностью.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
ama_kid
Дата 18.1.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 9
Всего: 95



Цитата(MetalFan @  18.1.2008,  14:09 Найти цитируемый пост)
смысл доп.нити теряется полностью. 
на мой взгляд - смысл доп. нитей в программе в том, чтобы организовать параллельную работу задач имеющих собственные обособленные данные. Если есть точки соприкосновения потоков в виде общих данных - то тут хочешь-не хочешь  приходится терять в параллельности из-за синхронизации. VCL - это и есть громадная точка соприкосновения рассматриваемых нами потоков и мне кажется тут по-любому некая часть параллельности уйдет в небытие, поэтому задача сводится к тому, чтобы эти потери минимизировать. Ты в своем примере организовал дополнительный цикл выборки сообщений, позволяющий это сделать, но автор не захотел его перенимать (более того, назвал "долбаниной"  smile) - его право. А по другому без синхронизации я плохо представляю себе решение данной задачи...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
MetalFan
Дата 18.1.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(ama_kid @  18.1.2008,  15:01 Найти цитируемый пост)
автор не захотел его перенимать (более того, назвал "долбаниной"  smile) - его право

в общем решение есть, если автор не понимает ньюнсов работы нитей, то пусть учит.

решение есть, но если он считает предыдущий мой пример "долбаниной", то пусть сам до него доходит, либо делает через попу с синхронизацией с главной нитью приложения.





--------------------
There are always someone smarter than you...
PM MAIL   Вверх
EKoshelev
Дата 18.1.2008, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 509
Регистрация: 1.9.2004

Репутация: нет
Всего: нет



Цитата(MetalFan @  18.1.2008,  15:27 Найти цитируемый пост)
решение есть, но если он считает предыдущий мой пример "долбаниной", то пусть сам до него доходит, либо делает через попу с синхронизацией с главной нитью приложения.


Вот я как чувствовал, что беседа дойдёт до подбных фраз.
Чё касается слова "долбанина", то я просто назвал им текст программы, желая разнообразить свою речь. И конечно же не пытался никого оскорбить или как-то негативно отозваться о предложенном решении...


Короче, ребята, на сколько я понял своим, по видимому, не очень производительным разумом, то, что предложил тов. ama_kid работать будет, но это не красиво (я даже кажется понял, что предложено). Но решение, предложенное тов. MetalFan обнаружило в себе кой-какие недостатки (суть которых я, кажется, изложил). Хотя, если пожертвовать некторыми своими пожеланиями, то может и заработает (я не все нюансы рассмотрел).

Цитата(MetalFan @  18.1.2008,  15:27 Найти цитируемый пост)
если автор не понимает ньюнсов работы нитей, то пусть учит

Автор не только этого не понимает этих ньюнсов, он, как выяснилось, даже не видит разницы между нитью и потоком. Поучить не прочь. Был бы рад, если кто-нибудь великодушно подкинул какую-нибудь наколочку на эту тему. В DRKB, кажись, сей материал изложен не вполне подробно (кучка примеров с коментами).

В общем, изо всех сил постараюсь творчески осмыслить/переосмыслить все предложенные вами решения.
Спасибо, друзья!



--------------------
Вежливым и адекватным предлагаю общаться на "ты".
PM MAIL   Вверх
MetalFan
Дата 18.1.2008, 16:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(EKoshelev @  18.1.2008,  16:21 Найти цитируемый пост)
Был бы рад, если кто-нибудь великодушно подкинул какую-нибудь наколочку на эту тему

есть очень хорошая тема на этом форуме: Многопоточность - как это делается в Дельфи




--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Prof_2000
Дата 18.1.2008, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 26.3.2005
Где: Харьков, Украина

Репутация: нет
Всего: 1



Вот пример с двумя доп. нитями. Одна нить работает сама по себе, а вторая синхронизируется с VCL и с первой нитью.

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  Unit1.pas 3,62 Kb
--------------------
Pereant qui ante nos nostra dixerunt! (лат.)      Да погибнут те, кто раньше нас высказал наши мысли!   
PM MAIL WWW ICQ   Вверх
MetalFan
Дата 18.1.2008, 19:27 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



дааа... маразм крепчал)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0666 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.