30. maj 2002 - 19:09Der er
5 kommentarer og 1 løsning
Status besked i programmer der laver store beregninger
Hej,
Jeg har lavt et program der laver store beregninger. Det kan tage optil en dag før programmet bliver færdig. Problemmet er at formen ikke opdateres under beregningerne. Dette betyder at man ikke kan integere med programmet under beregningerne. Man kan godt minimere programmet men så kan man ikke genskabe det i normal størelse igen før programmet er færdig med beregningen. Jeg har prøvt at lave en status besked i formens caption der udfra variabler i løkkestrukturer fortæller hvor langt programmet er kommet med beregningerne. Problemmet er at hvis jeg så minimere vinduet kan jeg ikke genskabe det for se hvorlangt programmet er. Mit spørgsmål er om der er nogen der har en god løsning til dette problem?
Der bliver investeret massivt i AI. Teknologien er mere tilgængelig end nogensinde, og ambitionerne er høje. Alligevel oplever mange virksomheder, at resultaterne udebliver.
Der er 2 muligheder. Den lette og den lidt sværere :)
Den lette er at du engang i mellem inde i den beregn-løkke kalder application.processmessages; Derved giver du programmet en mulighed for at "trække vejret" og lige opdatere formens udseende.
Den svære er at bygge beregningerne ind i en tråd, men hvordan du gør det vil jeg ikke komme nærmere ind på (Har jeg ikke kompetence nok til :))
>>runem74 Lige et råd... Application.ProcessMessages tager lidt ekstra regne kraft fra din PC, så hvis du kører den ofte, kommer beregningerne til at tage længere tid... Det er klart bedst at bygge beregningerne ind i en Thread... Den kan du også bede om at sende noget info tilbage til programmet, så du kan se hvor langt du er kommet...
I Delphi, vælg File->New...->Thread object. Skriv så et navn til din Thread, evt. "TBeregningsThread". I Execute proceduren skriver du så det din Thread skal lave.
Når du så skal bruge den, gør du følgende:
private Hest: TBeregningsThread;
procedure TForm1.Button1Click(Sender: TObject); begin Hest := TBeregningsThread.Create(False); end;
Når du create'r den med False-parameter, vil den gå i gang så snart den er create't...
Men kig lidt i hjælpen, der kan du finde meget godt! ;)
//hermandsen
Synes godt om
Ny brugerNybegynder
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.