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-07 21:50:00) [41]


> это типа Delay()?


Да.


> Ты же сказал он не нужен, если Animate.Timers = False


Так у тебя де на форме не только Animate, но и какие-то другие виз.контролы !
Их то надо обновить..


> Кого тогда конкретно слип тормозить будет?


Я же сказал - вызывающий поток. Т.е. основной в дан.случае.
А поскольку анимация выполнаяется в дополнительном, слип основного потока не должен никак на нее повлиять


kyn66   (2009-11-07 21:45:00) [42]


> Он "заморозит" выполнение вызывающегопотока на указанное
> время.


Т.е. программа не прервется визуально, это типа Delay()?


> pplication.ProcessMessages

Ты же сказал он не нужен, если Animate.Timers = False.Т.е. он будет в отдельном потоке работать. Кого тогда конкретно слип тормозить будет?


Сергей М.   (2009-11-07 21:37:00) [43]


> что он даст


Он "заморозит" выполнение вызывающего потока на указанное время.


> где его нужно ставить


Где угодно, но, разумеется, после

MesFrm.Show
pplication.ProcessMessages


kyn66   (2009-11-07 21:32:00) [44]


> Понатыкай слипов в свой премудрый цикл, так чтобы он выполнялся
> заведомо дольше той самой задержки,


Sleep() ?
Никогда не использовал. А что он даст. В каком плане будет выглядеть задержка? Точнее где его нужно ставить, в цикле, перед, после и т.д?


Сергей М.   (2009-11-07 21:31:00) [45]


>       MesFrm := TMesFrm.Create(nil);
>       MesFrm.Lab1.Caption := 'Формируется документ, ожидайте.
> ..';
>       MesFrm.Show;
>       MesFrm.Update; //это замени на Application.ProcessMessages


Сергей М.   (2009-11-07 21:25:00) [46]


> За тот промежуток времени пока они видны


Да упарил ты уже своим "промежутком" !)

Понатыкай слипов в свой премудрый цикл, так чтобы он выполнялся заведомо дольше той самой задержки, да посмотри наконец что там на самом деле происходит !

Как дитя малое, ей-богу)


kyn66   (2009-11-07 21:22:00) [47]


> Так не тикают вообще или все же тикают, но с задержкой ?
> )


За тот промежуток времени пока они видны на экране(~ 3 сек) - не тикают


Сергей М.   (2009-11-07 21:20:00) [48]

Так не тикают вообщеили все же тикают, но с задержкой ?)


Сергей М.   (2009-11-07 21:20:00) [49]

Так не тикают вообщеили все же тикают, но с задержкой ?)


kyn66   (2009-11-07 21:10:00) [50]


> Сказка про белого бычка)..Ну ты же сам в [41] сказал, что
> при активайии компонента в OnShow задержка исчезает ?


Говорил, не отрицаю. В примере все работало. Когда задействовал в своем коде - нет. Мистика?


Сергей М.   (2009-11-07 21:08:00) [51]


> возможно 4-х сек. задержка виновата


Сказка про белого бычка)..
Ну ты же самв [41] сказал, что при активайии компонента в OnShow задержка исчезает ?


> напорциклов


))
Мощно задвинул)

Ну понатыкай ты в этот цикл слипов побольше да подольше и посмотри, есть ли анимация или нет ..


kyn66   (2009-11-07 20:57:00) [52]

В том то и дело, что не тикают. Яж говорю, возможно 4-х сек. задержка виновата, возможно напорциклов перебора таблиц не дает стартануть, напрягает перерисовку инфо-формы... Вот поэтому и спрашиваю, что это могет быть


Сергей М.   (2009-11-07 20:55:00) [53]


> Пока он выполняется в фоне, часики на инфо-панели должны
> тикать


И что, не тикают ?)


kyn66   (2009-11-07 20:51:00) [54]

Жалко в твоем профайле мало инфы о тебе. Если бы у тя была указана ася, я бы быстрее смог объяснить, чем через форум. Ато товарищ из города Эстония уже сделал намек, что обсуждение слишком затянулось.

Так вот, как еще обэяснить то.. ДА и у меня никакие формы не исчезают. Просмотри внимательно мой код после этого коммента попунктно:
1) Тыкаем по пункту меню для формирования отчета procedure TMainFrm.RepRupsItemClick(Sender: TObject);
2)Прявляется форма выбора отчетного периода , чтобы указать месяц и год отчета PeriodFrm := TPeriodFrm.Create(Application);. Если выбрано и все Окейно, if PeriodFrm.ShowModal = mrOK thenто появляется инфо-окошко, форма MesFrmна котором и расположены аничасики.

   MesFrm := TMesFrm.Create(nil);
   MesFrm.Lab1.Caption := 'Формируется документ, ожидайте...';
   MesFrm.Show;
   MesFrm.Update;

3) Пошел выполняться основной этап отбора данных для отчета. Пока он выполняется в фоне, часики на инфо-панели должны тикать
....

НУ вот как то так. Понятно ща?


Сергей М.   (2009-11-07 20:43:00) [55]

А как мой пример пересекается с твоим ?)
В моем примере форма не исчезает и позволяет видеть работает или не работает компонент как положено ..
А у тебя форма, как ты говоришь, исчезает, так что ты сам не знаешь, то ли есть анимация. толи нет, то ли есть задержка, то ли нет)


kyn66   (2009-11-07 20:38:00) [56]

В твоем,

procedure TForm1.Button6Click(Sender: TObject);
begin
while true do;
end;


Сергей М.   (2009-11-07 20:35:00) [57]

В каком примере-то ?)


kyn66   (2009-11-07 20:33:00) [58]


[54]
> Но зато в примереубралась за счет этого 4-секундная пауза


PS
Кстати, рад тебя видеть в эфире в выходные :)


Сергей М.   (2009-11-07 20:31:00) [59]

Как это "не успевает", если [54] ?)


kyn66   (2009-11-07 20:27:00) [60]


> Сергей М. ©   (07.11.09 19:45) [60]
> И при этом ты утверждаешь, что запуск RepRupsItemClick в
> том виде, в котором он у тебя реализован, останавливает
> анимацию,


Я не сказал что останавливает. Я сказал , что анимация не успевает(возможно) стартануть, как инфо окно уже закрывается.


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

Наверх

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