Brug af Synchronize ?

Tags:    delphi

User
Bruger #476 @ 12.01.03 21:25
Når man i forbindelse med tråde og opdatering
til et skærmbillede går brug af Synchronize, betyder
det så at man sætter Main VCL-tråden til at sove, så en
sekundær tråd kan udføre feks en opdatering til et skærm-
billede. Eller betyder det at en sekundær tråd overdrager
jobbet til Main VCL tråden, så denne tråd kan udføre jobbet,
mens sekundære tråden sover og venter på at Main VCL
tråden skal blive færdig ??



3 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Det betyder at tråden der kalder synchronize, venter til trådene den skal synchronisere med er kørt færdig, før den kan fortsætte.

Mvh.,

Jakob Justsen


Det ville jeg også selv tro, men når jeg læser denne text, så ser det ud til at Main VCL tråden
holder pause, mens det er den sekundære-tråd som arbejder - og ikke omvendt.


Det er for så vidt også rigtigt. Det der sker er at din tråd fortæller main VCL tråden at der er noget arbejde som skal udføres. Når så main tråden har tid, udfører den dette arbejde og fortsætter så selv hvor den slap.

Man skal så ikke tage fejl af hvordan tråde arbejder. For selv om man kan sige at main tråden bliver pauset, er tanken jo lige netop med tråde at de kører sideløbende. Så som oftest vil man aldrig kunne se at main tråden sover, med mindre man har lavet en fejl i den synkroniserede kode, eller den er meget tung.

---
Thomas Due
tdue@mail.dk



Det betyder at tråden der kalder synchronize, venter til trådene den skal synchronisere med er kørt færdig, før den kan fortsætte.

Mvh.,

Jakob Justsen



User
Bruger #476 @ 12.01.03 23:04
Det betyder at tråden der kalder synchronize, venter til trådene den skal synchronisere med er kørt færdig, før den kan fortsætte.

Mvh.,

Jakob Justsen



Det ville jeg også selv tro, men når jeg læser denne text, så ser det ud til at Main VCL tråden
holder pause, mens det er den sekundære-tråd som arbejder - og ikke omvendt.

Whenever you run a thread that requires access to a VCL embedded on a form, you need to call Synchronize to synchronize the thread with main thread of the program, which has ownership of the VCL. Essentially, what happens here is that the main thread is put to sleep temporarily, so the external thread can do its processing, like changing the Caption text of a TLabel



t