Кто поделится ФАЛЬШ-ПрогрессБаром для работы по ВРЕМЕНИ.

Petro123
Дата: 04.10.2004 10:01:55
Кто поделится ФАЛЬШ-ПрогрессБаром для работы по ВРЕМЕНИ.
=========================================
Много длит.операций в БД не поддерживают сообщения о позиции выполнения.
Пункты ТЗ:
- в виде dfm
- в виде потока (а как ещё?)
- простой код (можно без картинок)
- показывает время (прошло/осталось)
- запуск например в виде:

Progr := TMyProgress.Create;
Progr.Start(30); // минут
...............
.........
// длительный код в основном потоке
...............
.........
Progr.Stop; // если по времени длительный код выполнялся более 30 минут.
Progr.Free;
Mess('Операция выполнена').
Гавриленко Сергей Алексеевич
Дата: 04.10.2004 10:06:14
автор
- показывает время (прошло/осталось)

Запрос асинхронный ( через ADO или в поток ), на форму таймер, который раз в n секунд обновляет какой-нить panel на статусбаре.
Petro123
Дата: 04.10.2004 10:14:37
Гавриленко Сергей Алексеевич
автор
- показывает время (прошло/осталось)

Запрос асинхронный ( через ADO или в поток ), на форму таймер, который раз в n секунд обновляет какой-нить panel на статусбаре.

Я так понял - асинхронный или нет, это только относится к потоку. Если асинхронный, то конец операции придёт по событию от сервера в процедуру.
2. У меня провайдер XMLBulcLoad для вставки миллиона записей. Он вероятно не поддерживает асинхронный режим. Тогда надо по старинке как я написал?
Petro123
Дата: 04.10.2004 10:17:17
В поток мне делать запрос смысла нет, т.к. надо модальное окно и пользователь ничего не должен делать пока идёт вставка.
Поэтому проще в потоке ПрогрессБар сделать.
softwarer
Дата: 04.10.2004 10:49:54
Petro123
Поэтому проще в потоке ПрогрессБар сделать.

Проще-то оно конечно проще, только работать не будет :)

С точки зрения простоты - можешь попробовать использовать TAnimation. Не уверен, но может и работать в таком режиме.
Petro123
Дата: 04.10.2004 11:02:37
softwarer
Petro123
Поэтому проще в потоке ПрогрессБар сделать.

Проще-то оно конечно проще, только работать не будет :)

С точки зрения простоты - можешь попробовать использовать TAnimation. Не уверен, но может и работать в таком режиме.

Блин! Это что? Никто не делал Фальшивый Прогресс?
Ничего не пойму? На той неделе softwarer предлагал немодальное окно для его организации. Теперь говоришь - не будет работать????
Причём тут асинхронный режим??????
Какая разница - запрос в потоке и я занимаюсь отоброжением прогресс или прогресс в потоке и в основном у меня запрос????????????
zalexaka
Дата: 04.10.2004 11:11:14
можно api-шное оконце наваять которое будет запускаться отдельным потоком.
ЗЫ
про TForm можно забыть он к главному потоку прикручен
softwarer
Дата: 04.10.2004 11:25:06
Petro123
Какая разница - запрос в потоке и я занимаюсь отоброжением прогресс или прогресс в потоке и в основном у меня запрос????????????

Разница в том, что VCL некоторую разницу видит. О чем прямым текстом написано в хелпе по программированию потоков. Относительно недавно здесь уже был топик человека, который пробовал работать в таком режиме и спрашивал - как победить глюки.
Petro123
Дата: 04.10.2004 11:33:15
Давайте не отделываться общими фразами.
Разница в том, что VCL некоторую разницу видит=============
Какую?
О чем прямым текстом написано в хелпе по программированию потоков.
======== Что написано? Нельзя из потока дать команду немодальному/модальному окну-форме "УстановитьПозицияПрогресс = 10"? Даже при синхронизации?

Относительно недавно здесь уже был топик человека, который пробовал работать в таком режиме и спрашивал - как победить глюки.======= Я думаю он победил за счёт синхронизации при "общении" классов между потоками.
Petro123
Дата: 04.10.2004 11:54:11
Хорошо! Абстрагируемся от SQL Server'a. Как решить задачу с неким кодом длительным и его отображением в прогрессБаре.

DLL.ФукцияНезнаюСкокаВыполняется;
Единственное решение - это засунуть dll в поток?
Я считаю, полумерой провести тест на неё и "временно" выставить таймер на 45 минут.
Это лучше чем запихнуть неизвестный код в поток или повесить песочные часы на 45 минут.