Avatar billede thecokeguy Nybegynder
29. juni 2006 - 06:16 Der er 9 kommentarer og
1 løsning

Multithreading springer kode over

Hej...

Jeg har lavet en thumbnail-visning der kører i et eksternt unit som en tråd. Jeg har lavet det sådan at jeg tager tid på hvor lang tid det tager at vise en mappes indhold, sådan at jeg til sidst kan dele denne tid med antallet af billeder, for at opnå gennemsnitstiden for  visningen af et billede. Jeg har i tråden sørget for at når alt dette er eksekveret, så giver den mig gennemsnitstiden via ShowMessage. Gennem et sådant forløb kan jeg støde på flg. fejl:

Nogle gange springer det et billede over, dvs. at der opstår et "hul" i min visning.

Når programmet skal give mig gennemsnitstiden, så går der noget galt, sådan at jeg i stedet for et tomt og uendeligt bredt besked-vindue.

Kan nogen fortælle mig hvorfor dette går galt... Jeg kunne forestille mig at det kan noget med multithreading at gøre, men er ikke selv erfaren nok til at kunne bedømme det.

På forhånd tak.
Avatar billede kroning Nybegynder
29. juni 2006 - 11:52 #1
Kan det være fordi at du fra din tråd kalder kode i din hoved tråd uden at bruge Syncronize?
Avatar billede thecokeguy Nybegynder
29. juni 2006 - 20:20 #2
Jeg ved ikke hvordan man synkroniserer, så tanken har strejfet mig... Jeg eksekverer koden i tråden OnCreate. Kan du fortælle mig hvordan jeg synkroniserer?
Avatar billede kroning Nybegynder
29. juni 2006 - 20:29 #3
Bruger du ikke TThread?
Avatar billede thecokeguy Nybegynder
29. juni 2006 - 20:40 #4
Jo... class(TThread)

Jeg kører koden sådan:
thread := TThumbnail.Create(folder: string; cv: TCanvas);

Jeg er ikke bekendt med andre måder at køre den på...
Avatar billede kroning Nybegynder
29. juni 2006 - 20:45 #5
ok, jeg troede at du selv havde skrevet koden der kører i tråden. Men så har jeg ikke lige flere ideer.
Avatar billede thecokeguy Nybegynder
29. juni 2006 - 20:50 #6
Det har jeg også...

Du siger at jeg skal synkronisere, når jeg kalder kode i hovedtråden... Kan det f.eks. være når jeg tegner til et canvas på hovedformen?

I så fald, hvordan synkroniserer jeg før dette?
Avatar billede kroning Nybegynder
29. juni 2006 - 21:34 #7
Du skal bruge proceduren Synchronize hvis du, fra din tråd, vil kalde kode som befinder sig i hovedtråden. Synchronize er beskrevet i hjælpen og der er også vist et lille eksempel.

procedure TMyThread.PushTheButton;

begin
  Button1.Click();
end;

procedure TMyThread.Execute;
begin
...
  Synchronize(PushTheButton);
  ...
end;
Avatar billede kroning Nybegynder
29. juni 2006 - 21:36 #8
Dvs. at du nu i proceduren PushTheButton kan kalde alt den kode du vil i hovedtråden fordi PushTheButton er blevet kaldt med Synchronize.
Avatar billede thecokeguy Nybegynder
29. juni 2006 - 22:13 #9
Genialt...

Nu virker det perfekt... Du har været til stor hjælp (endnu engang), takker mange gange.

Poster du lige et svar, så du kan inkassere de velfortjænte point?
Avatar billede kroning Nybegynder
29. juni 2006 - 23:28 #10
ok
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