Avatar billede jespersp Nybegynder
03. december 2004 - 20:31 Der er 5 kommentarer og
1 løsning

Simpel progress indicator

Hej mæ jer.

Jeg har lavet et program der vha. DMATH (http://www.unilim.fr/pages_perso/jean.debord/tpmath/tpmath.htm) kan fitte en masse data til nogen angivne formler vha. least squares metoden. Programmet fungerer fint, men eftersom der efterhånden er en del personer der spørger mig om de kan 'låne' programmet til at fitte deres egne data, overvejer jeg om jeg skulle gøre lidt ved GUI'en og brugervenligheden.

Jeg sidder og nørkler med at lave en lille progress indicator til når programmet fitter (kan tage nogen minutter) så man kan se at programmet ikke er gået kold, og evt. afbryde hvis det kører fast. Det ville måske være godt at får lidt løbende information om hvordan det går med fitningen.

Jeg kalder en funktion der findes i DMATH pakken, som så først returnerer når den har fittet færdig, men eftersom jeg har source-koden til DMATH pakken kan jeg godt lægge noget ekstra kode ind i den hvis det skulle blive nødvendigt.

Muligvis skulle man lave et lille vindue der viser progress, men jeg ved ikke hvordan det gøres smart, og ikke mindst hvordan man gør det uden at det tager dobbelt så lang tid at fitte, fordi opdateringen af GUI æder for meget CPU.

Er der nogen der har nogen smarte hints til mig før jeg går igang ? ;)

/JesperSP
Avatar billede hyrtwol Nybegynder
05. december 2004 - 20:19 #1
hvad med at lade fit'ningen køre i sin egen thread ?? den kunne så kalde hovedprogrammet med en progress information med et passende interval... og hovedprogrammet går ikke "kold" imens :)
Avatar billede jespersp Nybegynder
08. december 2004 - 17:20 #2
Eh.. Nu er jeg ikke så skarp til at lave threads. Jeg regner med at der skal poppe et vindue op med status og en 'Cancel' knap, mens hovedprogrammet sover.

Jeg kalder fitningen fra hovedprogrammet med :

//-snip from unit1.pas
    SetOptAlgo(NL_Marq);
    try
      ErrorCode:=NLFit(ParseFunc,numDeriv,Xsub,Ysub,LastPoint-Firstpoint+1,1,variables,MaxIter,0.0000000001,XVec,B_min,B_max,V);
    except
      ErrorCode:=OPT_BIG_LAMBDA;
    end;
//-end

NLFit ligger i regress.pas, og herfra kaldes en anden unit kaldet optim.pas. I fitnigs-løkken har Dr. Jean Debord lavet en mulighed for at skrive til en log-fil:

//-Snip fra optim.pas
      if WriteLogFile then
        WriteLn(LogFile, Iter:4, '  ', F_min:12, '  ', Lambda:12);
//-end

og det er her jeg regner med at jeg skal sende et eller andet signal tilbage til progress indicatoren. - men hvordan gør jeg det ?

/JesperSP
Avatar billede claes65 Nybegynder
08. februar 2005 - 15:18 #3
Hej Jesper! Kan du ikke bare lave en Form, der indeholder en TProgressBar m.v. og inkludere den i uses i optim.pas? I forbindelse med at du skriver loggen giver du besked til formens progressbar med Form.Progressbar.Position.

Hvis jeg helt har misforstået opgaven, må du lige præcisere... ;)

Hilsen Claes
Avatar billede jespersp Nybegynder
10. februar 2005 - 10:59 #4
Tak! - Det er ikke altid man lige selv kan se de nemme løsninger, for det her, det spiller max Claes65 - altså næsten.. for min Cancel button er ligesom død og vil ikke modtage noget input... Men den er tæt på at være der nu :)

Hilsen Jesper
Avatar billede jespersp Nybegynder
10. februar 2005 - 11:22 #5
Har fundet ud af det ... der skulle bare lige en "Application.processmessages" ind i løkken.

Hvis du vil have points, claes65, så drop et svar..
Avatar billede claes65 Nybegynder
10. februar 2005 - 13:05 #6
Glæder mig det lykkedes... ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester