![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Останавливается информация о ходе выполнения процесса [D7, XP]
kyn66 © (2009-11-06 13:11:00)Добрый день, мастера. Во время загрузки данных в таблицу(процесс занимает определенное время) информирую пользователя о ходе выполнения процесса через ProgressBar и цифровую информацию в процентах http://yurec66.narod.ru/Vopros/proc.jpg. Если не совершать никаких действий, все идет нормально. Вот код обработки:
SL := TStringList.Create;
SL.LoadFromFile(ImportPath + FName);
PB1.Max := SL.Count;
PB1.Position := 0;
Nzap := 0;
NzapV := 0;
NzapC := Trunc(SL.Count/100);
for i := 0 to SL.Count - 1 do
begin
SS := SL[i];
...
// ряд некоторых операций
...
PB1.Position := PB1.Position + 1;
Inc(Nzap);
if Nzap >= NzapC then
begin
Inc(NzapV);
ProcLab.Caption := IntToStr(NzapV) + ' %';
ProcLab.Update;
Nzap := 0;
end;
// еще одна операция некоторая
end;
SL.Destroy;
PB1.Position := 0;
Стоит только перключиться на другое окно или это в фоне сделает любая юругая программа(т.е. окно с прогрессом теряет фокус) - прогресс сразу же замирает, цифры процентов не меняются. СОздается впечатление, что прога зависла, хотя процесс обработки данных выполняется. Как это выличить? ЧТобы и при потере фокуса прогресс с процентами не переставали информировать юзера?
Сергей М. (2009-11-06 16:20:00) [81]
> Анимация начинает работать через 4 сек. после появления
> формы
Клиент не успеет застрелиться за это время от скуки, а остальным можно пренебречь
kyn66 (2009-11-06 16:19:00) [82]В дополнение. Подсчитал. Анимация начинает работать через 4 сек. после появления формы.
Сергей М. (2009-11-06 16:19:00) [83]Так а куда ж ты торопился ?)
kyn66 (2009-11-06 16:14:00) [84]
> Ты давай уже щагляди)Про оперов потом потолкуем)
Дествительно все работает. И после
procedure TForm1.Button1Click(Sender: TObject);
begin
while True do;
end;
Тоже...
Однако заметил одну вестч. После запуска прожки (F9) часики на форме стоят неподвижно, где-то сек. 2, потом оживают. МОжет я поэтому и не успевал заметить анимации, что часики в моем коде не смогли вовремя стартануть?
Сергей М. (2009-11-06 16:09:00) [85]
> это из какой оперы?
Ты давай уже щагляди)
Про оперов потом потолкуем)
Anatoly Podgoretsky (2009-11-06 16:08:00) [86]
> чайком напою... заодно
Это значит, что можешь и не напость - это жестоко!
kyn66 (2009-11-06 16:05:00) [87]
Anatoly Podgoretsky ©
> У нас нет повода тебе верить.
Ну так приезжай в гости... чайком напою... заодно.... А там и на кодик глянем...
> Не работает ?)
Ща гляну
Жму F9 - часы идут.
Жму кнопку - часы идут.
А это из какой оперы?
Anatoly Podgoretsky (2009-11-06 15:57:00) [88]> kyn66 (06.11.2009 15:34:31) [31]
У нас нет повода тебе верить.
Сергей М. (2009-11-06 15:47:00) [89]
> чем он тяжелее?
Тем что полностью и безусловно захватывает временные ресурсы основного потока.
> А у меня еще и механизмы доступа к БД задействуются
Да фиолетово что у тебя там задействуется, если при этом не изменяются приоритеты потоков тек.процесса.
Ты вместо своих премудростей попробуй вставь мой цикл.
Не работает ?)
kyn66 (2009-11-06 15:34:00) [90]
> Однако анимация успешно крутится и безо всяких притом Application.
> ProcessMessages
Ну не собираюсь же я тебя обманывать.... Говорю как есть.
> у меня намного более тяжелый цикл чем у тебя
А чем он тяжелее? Что бесконечный? А у меня еще и механизмы доступа к БД задействуются , и физическая запись на диск и т.д. Так шта.... где ешшо тяжелее. Но от этоге не легче. У меня даже инфо-форма не успевает перерисоваться во время выполнения циклов, и как бы обрезаная получается от наложения предыдущей "запускающей на старт циклы" формы. Вот где то так объяснил...
Сергей М. (2009-11-06 15:24:00) [91]
> ЧТо МАстер имеет сказать по этому поводу?
А то и скажу - у меня намного более тяжелыйцикл чем у тебя
while True do;
Однако анимация успешно крутится и безо всяких притом Application.ProcessMessages
kyn66 (2009-11-06 15:20:00) [92]Вроде чтото прояснилось. Но ты Сергей сдесь не прав получился
> Впрочем "AVI-шным часикам", если ты имешь ввиду TAnimate,
> эта строчка нафих не нужна, если Animate.Timers = False.
>
Я не зря предложил сравнить по кодам твой рабочий вариант и мой. Дело в том, что у меня внутри "Инфо-обложки" находятся несколько блоков с цикоами типа
....
while not CpsQuery.EOF do
begin
SQL.Clear;
SQL.Add('SELECT ');
SQL.Add('SUM(Kol1) As SKol1, SUM(Sum1) As SSum1,');
...
Так вот, я попытался вставить Application.ProcessMessages;в кождое тело циклов.
....
while not CpsQuery.EOF do
begin
Application.ProcessMessages;
SQL.Clear;
SQL.Add('SELECT ');
SQL.Add('SUM(Kol1) As SKol1, SUM(Sum1) As SSum1,');
...
Только после этого часики ожили. ЧТо МАстер имеет сказать по этому поводу?
Сергей М. (2009-11-06 15:18:00) [93]В дизайн-тайме шмякнул на чистую форму в чистом проекте компонент Animate, установил его св-ва
FileName = твой файл
Active = True
Шмякнул еще кнопку, назначил обработчик клика с текстом
while True do;
Все.
Жму F9 - часы идут.
Жму кнопку - часы идут.
)
kyn66 (2009-11-06 15:10:00) [94]
> с живой они или дохлой кукушкой - то без разницы)
:))))))))
А может по коду сравним? Я свой привел, в котором они стоят. Может на их "живучесть" влияет набор операторов внутри "обложки" инфо-формы?
Сергей М. (2009-11-06 15:05:00) [95]
> Стоят как вкопанные и не тикают
У меня крутятся и тикают)
Что я делаю неправильно ?)
Сергей М. (2009-11-06 15:02:00) [96]
> красивые аничасики и проверить. Вроде стандартный дэльфовый
> не очень
И чем же якобы некрасявость дельфовых аничасиков может повлиять на сабж ?)
Ничем)
Либо они шевелятся в принципе либо не шевелятся вовсе, а уж цифровые они или аналоговые, с живой они или дохлой кукушкой - то без разницы)
kyn66 (2009-11-06 14:59:00) [97]
> У меня тикали.Что я делал неправильно ?
Ну не знаю, вот эти http://yurec66.narod.ru/Hlam/1.AVIвешаю. Стоят как вкопанные и не тикают.
kyn66 (2009-11-06 14:50:00) [98]
> Anatoly Podgoretsky © (06.11.09 14:38) [20]
> > kyn66 (06.11.2009 13:53:07) [7]Ну так статья его собственность,
> а сообщение на форуме принадлежит форуму и он защищается
> от подчисток.
О каких подчистках идет речь, не морочьте голову. Я говорю о банальных очепятках, которые сразу то и не заметишь, а когда пост ушел, блин, смотришь и угараешь от своей криворукости. Посмотрите в сетке... Все форумы позволяют корректировать свои посты. ДА ладно, чего пену пускать. Приходится принимать что есть. И на том спасибо.
kyn66 (2009-11-06 14:48:00) [99]
> Что я делал неправильно ?
:)))) вот же напартачил(для лексиглазов вариант напортачил) ты, что у тебя все работало... :))) Надо поискать в нэте красивые аничасики и проверить. Вроде стандартный дэльфовый не очень как -то...
Сергей М. (2009-11-06 14:42:00) [100]
> если False, то анимация выполняется отдельным потоком?
Да.
> Но ведь не тикали
У меня тикали.
Что я делал неправильно ?