Toon posts:

[BCB] Status van VCL-comp. binnen thread

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig aan een multithreaded ftp-client in C++Builder 6.0. Ik maak gebruik van de TFtpClient component uit ICS (Internet Component Suite).

In de constructor van mijn CTransferThread-object (afgeleidde van TThread) maak ik dynamisch een instance van dat TFtpClient-object aan en in de execute() functie van die thread log ik in op een ftp server, browse ik naar de juiste directory en begin ik een asynchrone download. So far, so good...dit werkt nog.

Maar ik wil op het form van mijn ftp-client de status van iedere thread te zien krijgen...bv. hoeveel KB er al gedownload is...dit doe ik op het moment door (mbv. een timer in de mainthread) iedere seconde alle threads die actief zijn te laten pauseren (met Suspend()), dan een functie binnen die thread aan te roepen genaamd InformStatus() die vervolgens de waardes van een aantal properties van het TFtpClient-object doorstuurt naar het mainform. Daarna roep ik Resume() aan om de threads weer te activeren. Resultaat: Access Violation (op een lege regel, ook vrij vaag...).

Nou heb ik zo'n donkergroen vermoeden dat het probleem 'm zit in het feit dat ik een functie binnen de thread aanroep terwijl de thread suspended is....maar ik heb geen flauw idee hoe ik het anders aan zou moeten pakken.

Iemand?

(Ik hoop dat ik het zo een beetje begrijpelijk uitgelegd heb...kan mijn code wel posten, maar dat lijkt me niet zo zinvol...?)

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Je kan pushen:
Je kan je Thread een OnStatus event geven die het main form kan gebruiken. Hierbij moet je wel zorgen voor Synchronisatie zodat je thread safe blijft.

Of je stuurt een window message met de juiste informatie naar je Form. Hierbij hoef je je niet druk te maken over thread safety.

Of pullen:
Zoals je nu ongeveer doet. Ik snap alleen niet waarom je de thread suspend om de waarde op te vragen. En je moet ook hier zorgen voor synchronisatie zodat je thread safe blijft. Zie in de help over Thread.Synchronize.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Het versturen van de status vanuit de thread naar de mainform is geen probleem...maar om ervoor te zorgen dat de thread ook iedere seconde de status verstuurd is een beetje een dilemma...maar daar kan ik ook een message voor gebruiken, right? De threads hebben ook gewoon een handle, dus...

Voor het versturen van de status naar het mainform gebruik ik ook de synchronize methode btw...