Pętla While i Progres

CI
  • Rejestracja: dni
  • Ostatnio: dni
0

Chciałbym wyświetlić procent wykonania pętli While na progress Bar. Jak to zrobić ??

MrSquell
  • Rejestracja: dni
  • Ostatnio: dni
0

hmmmmm zależy czy pętla while jest skończona ;] ludzie logicznie! jesli jest to wystarczy prosta proporcja (chyba wiesz co to??)
Potrzebujesz 1 zmiennej pomocniczej ktora bedzie ci zliczac ile razy zostala wykonana petla czyli moze to byc np. I (w petli koniecznie instrukcja Inc(I) albo I := I+1; ) . X to maksymalna ilosc powtorzen petli (z gory okreslona).

 X        100%

------ = -------
I Z%

czyli Z := (I*100) div X;

PrograssBar1.Possition := Z;

i w czym problem...?

Wodzu
  • Rejestracja: dni
  • Ostatnio: dni
0

Z doswiadczenia wiem ze wyswietlanie postepu na progress barze zwalania potwornie wszystko...szczerze odradzam;>

Numi
  • Rejestracja: dni
  • Ostatnio: dni
0

i w czym problem...?

ano w tym chociażby, że jeśli pamięc mnie nie myli, to to nie zadziała :)
progress bar będzie 0, potem pętla się wykona do końca i dopiero 100% -
trzeba w pętli [najlepiej po zwiększeniu licznika bara] dodać Application.ProcessMessages; inaczej nie będzie obsługiwał repainta na bieżąco.

pq
  • Rejestracja: dni
  • Ostatnio: dni
0

Bez sensu jest obliczać Z w każdym obrocie pętli. Lepiej ustawic granice Bara równe granicom pętli i ProgressBar.Position:=i;

a najlepiej robić żby nie zwalniac robić to co któryć obrót pętli np.

if ( mod 1000)=0 then
begin
Progressbar.Position:=i;
Application.ProcessMessages;
end;

zamist 1000 moze być co innego w zależności od czasochłonności petli.

Marooned
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
0

if ( mod 1000)=0 then

mod korzysta z instrukcji dzielenia - jedna z najwolniejszych instrukcji procesora... proponowałbym jakiś inny typ testowania.
Ot choćby zmienna bajt i testować, czy jest zerem - a co krok ją zwiększać o 1 - wtedy mamy prawdziwy warunek co 256 przejść - taki przykład tylko...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.