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...?)
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...?)