Ik wil hier d.m.v. de remote api (rapi) bestanden van de pc naar een pda zetten.
Op zich werkt dat allemaal goed, alleen als de pda niet is aangesloten dan hangt het geheel op CeRapiInit, zeg maar de constructor van de rapi
Gaat het goed, dan komt hij er meteen doorheen, gaat het fout dan komt hij er nooit doorheen. Je kunt na 10 seconden wachten veilig stellen dat het nooit meer gaat lukken, ook niet als je alsnog de pda aansluit
Nou, dan zet je die CeRapiInit toch in een thread, en wacht je met WaitForSingleObject voor een bepaalde tijd, waarna je de thread killed (TerminateThread, ding roept alleen CeRapiInit aan dus geen memleaks (toch?)).
Het probleem is echter, dat ik afaik geen manier heb om te kijken of de thread goed is doorlopen:
• FreeOnTerminate freed wel de thread, maar Assigned of 'is TTestThread' werkt niet
• Synchronize aanroepen levert een deadlock op door WaitForSingleObject
• Het OnTerminate-event werkt ook niet door WaitForSingleObject dus daarin kan ik geen FreeAndNil aanroepen.
• De Terminated-property is protected en niet public, dus die kan ik buiten de thread ook niet aanroepen.
• Terminate en WaitFor werken niet omdat het maar 1 commando is ((R)API-call) waar ik geen invloed op kan uitoefenen
• Een globale variabele setten is afaik niet threadsafe
Die laatste weet ik echter niet zeker... Kan ik (veilig) een public variabele in TTestThread maken en deze in de mainthread uitlezen?
Of hoe los ik dit anders op?
Edit: Ik struikel net over GetExitCodeThread, die een STILL_ACTIVE zou retourneren als de thread nog loopt. Ik ga hier eens mee testen
Op zich werkt dat allemaal goed, alleen als de pda niet is aangesloten dan hangt het geheel op CeRapiInit, zeg maar de constructor van de rapi
Gaat het goed, dan komt hij er meteen doorheen, gaat het fout dan komt hij er nooit doorheen. Je kunt na 10 seconden wachten veilig stellen dat het nooit meer gaat lukken, ook niet als je alsnog de pda aansluit
Nou, dan zet je die CeRapiInit toch in een thread, en wacht je met WaitForSingleObject voor een bepaalde tijd, waarna je de thread killed (TerminateThread, ding roept alleen CeRapiInit aan dus geen memleaks (toch?)).
Het probleem is echter, dat ik afaik geen manier heb om te kijken of de thread goed is doorlopen:
• FreeOnTerminate freed wel de thread, maar Assigned of 'is TTestThread' werkt niet
• Synchronize aanroepen levert een deadlock op door WaitForSingleObject
• Het OnTerminate-event werkt ook niet door WaitForSingleObject dus daarin kan ik geen FreeAndNil aanroepen.
• De Terminated-property is protected en niet public, dus die kan ik buiten de thread ook niet aanroepen.
• Terminate en WaitFor werken niet omdat het maar 1 commando is ((R)API-call) waar ik geen invloed op kan uitoefenen
• Een globale variabele setten is afaik niet threadsafe
Die laatste weet ik echter niet zeker... Kan ik (veilig) een public variabele in TTestThread maken en deze in de mainthread uitlezen?
Of hoe los ik dit anders op?
Edit: Ik struikel net over GetExitCodeThread, die een STILL_ACTIVE zou retourneren als de thread nog loopt. Ik ga hier eens mee testen
[ Voor 5% gewijzigd door Paul op 05-03-2004 11:17 ]
"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock