Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Останавливается информация о ходе выполнения процесса [D7, XP]


Страницы:   1 2 3 4 5 6

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, то анимация выполняется отдельным потоком?


Да.


> Но ведь не тикали


У меня тикали.
Что я делал неправильно ?


Страницы:   1 2 3 4 5 6

Наверх

Титульная страница Поиск, карта сайта Написать письмо