Hallo zusammen,
ich habe eine Funktion, welche ein Objekt erstellt, welches im weiteren Verlauf für eine unbestimmte Zeit innerhalb eines zweiten Threads verwendet wird. Die Funktion liefert das Objekt zusätzlich als Rückgabewert an den aufrufenden Benutzer zurück, damit dieser bestimmte Informationen (die der Thread setzt) mitverfolgen und auch per Methodenaufruf z.B. die Verarbeitung abbrechen kann.
Das Problem besteht nun in der Frage, wer das Objekt wieder freigeben soll. Geschieht dies nach seiner Verarbeitung im Thread, kann es sein, dass der Benutzer nachträglich versucht auf das nicht mehr existierende Objekt zuzugreifen. Gibt der Benutzer das Objekt frei, hat man das selbe Problem in umgekehrter Richtung.
Folgende Möglichkeiten sind mir eingefallen:
- Ich gebe ein Interface zurück, welches von Delphi automatisch über _Release() freigegeben wird, sobald keine Referenz mehr existiert
- Ich gebe in der Funktion ein Wrapper Objekt zurück, welches nach Art des Proxy Patterns auf das eigentliche Datenobjekt zugreift. Der Thread würde dann bei Freigabe des Datenobjekts auch ein Flag im Wrapper Objekt setzen, was dafür sorgt, dass der Benutzer nicht mehr auf bestimmte Werte und Methoden zugreifen kann
Welche dieser Methoden würdet ihr bevorzugen oder fällt euch vielleicht noch eine bessere Alternative ein?
Viele Grüße
Zacherl