Hallo zusammen,
mein Problem ist folgendes :
Meine Klasse führt nacheinander verschiedenen DCOM Aufrufe in Threads aus.
Ist ein Thread fertig mit seinem Aufruf, so wird in der OnTerminate Behandlungsroutine der nächste Thread aus einer Queue gelesen, gestartet und der alte Thread freigegeben.
Bei der Freigabe dieses alten Threads kommt es allerdings zu einem sehr erstaunlichen Verhalten : das ganze klappt eine feste Anzahl von Versuchen,
dann klappt es genau 2 Versuche nicht. Nicht klappen heisst, dass nach der Ausführung der OnTerminate Behandlung eine EAccessViolation herauskommt. Ich hab das soweit lokalisiert, dass versucht wird auf das Objekt, das den DCOM Aufruf durchführt zuzugreifen. Dieses ist zu dem zeitpunkt aber schon gar nicht mehr da(Instanzvariable des Threadobjekts).
Die Frage ist jetzt, wer diesen Versuch unternimmt, er kommt nämlich garantiert nicht aus meinem Quellcode.
Eine etwas genauere Untersuchung zeigte, dass das Handle des eigenltichen API Threads ordnungsgemäss geschlossen wird und die message zum Schliessen des Thread Windows auch rausgeht(sollte der Thread nciht Gescichte sein, wenn das Handle Closed ist??). Allerdings kommt die message nie in der Verarbeitungsroutine des ThreadWIndows an. Irgendwo auf dem Weg scheint etwas schief zu gehen, das eine EAccessViolation auslöst. Diese EAccesViolation stopt übrigens nicht mein Programm, das läuft lustig weiter. Sehe ich das dann richtig, dass die EAccessViolation nicht in meinem Code auftritt?
Ich hoffe mal, mein Wirrwar sagt jetzt irgendjemandem etwas ;-)
Danke schonmal
Christoph
mein Problem ist folgendes :
Meine Klasse führt nacheinander verschiedenen DCOM Aufrufe in Threads aus.
Ist ein Thread fertig mit seinem Aufruf, so wird in der OnTerminate Behandlungsroutine der nächste Thread aus einer Queue gelesen, gestartet und der alte Thread freigegeben.
Bei der Freigabe dieses alten Threads kommt es allerdings zu einem sehr erstaunlichen Verhalten : das ganze klappt eine feste Anzahl von Versuchen,
dann klappt es genau 2 Versuche nicht. Nicht klappen heisst, dass nach der Ausführung der OnTerminate Behandlung eine EAccessViolation herauskommt. Ich hab das soweit lokalisiert, dass versucht wird auf das Objekt, das den DCOM Aufruf durchführt zuzugreifen. Dieses ist zu dem zeitpunkt aber schon gar nicht mehr da(Instanzvariable des Threadobjekts).
Die Frage ist jetzt, wer diesen Versuch unternimmt, er kommt nämlich garantiert nicht aus meinem Quellcode.
Eine etwas genauere Untersuchung zeigte, dass das Handle des eigenltichen API Threads ordnungsgemäss geschlossen wird und die message zum Schliessen des Thread Windows auch rausgeht(sollte der Thread nciht Gescichte sein, wenn das Handle Closed ist??). Allerdings kommt die message nie in der Verarbeitungsroutine des ThreadWIndows an. Irgendwo auf dem Weg scheint etwas schief zu gehen, das eine EAccessViolation auslöst. Diese EAccesViolation stopt übrigens nicht mein Programm, das läuft lustig weiter. Sehe ich das dann richtig, dass die EAccessViolation nicht in meinem Code auftritt?
Ich hoffe mal, mein Wirrwar sagt jetzt irgendjemandem etwas ;-)
Danke schonmal
Christoph
Comment