Ich hatte zwar nicht vor großartig auf die Applikation einzugehen, aber anscheinend ist dies notwendig für eine Lösungsfindung oder zumindest damit kein Unmut im Forum entsteht
Nein, niemand soll hier verleitet werden, seinen konkreten AnwendungsFall, das komplette Umfeld, BetriebsGeheimnisse oder was auch immer preiszugeben.
Manchmal bis oft ist es jedoch hilfreich, das Umfeld ein wenig abzuklopfen, um die Aufgabenstellung besser bzw. überhaupt zu verstehen oder zumindest zu erahnen.
Jeder von uns hat ganz unterschiedliche Erfahrungen und (Spezial-)Kenntnisse.
Da unsere GlasKugeln unterschiedlich gut trainiert sind, mag der eine schon den ersten Beitrag richtig deuten, während ein anderer bis zum letzten Beitrag nur Bahnhof versteht.
1. Das Kriterium, das Dir sagt, "die Instanz XY wird benutzt", ist mir klar.
2. Das Kriterium, das Dir sagt, "die Instanz XY wird neuerdings benutzt (= wurde bisher nicht benutzt)", ist mir auch klar. Aber nach diesem Fall fragst Du gar nicht.
3. Welches Kriterium hast Du, das Dir sagt "die Instanz XY wird nicht mehr benutzt"? Das ist mir nach wie vor ein Rätsel.
Eine Instanz, die aufgerufen wird, ermittelt ihren Pfad und kann die Liste (das Array) durchsuchen, ob ihr Präfix dort eingetragen ist.
- Ist es eingetragen, so ist für Dich der Fall erledigt. Der FB kann sich seiner eigentlichen Aufgabe widmen.
- Ist es nicht eingetragen, so interessiert Dich das anscheinend nicht (?) und der FB kann sich ebenfalls seiner eigentlichen Aufgabe widmen.
Eine Instanz, die nicht aufgerufen wird, kann nicht ihren Pfad und Präfix ermitteln und auch nicht ein evtl. Vorhandensein in der Liste prüfen, geschweige denn einen Eintrag in der Liste löschen und die Liste danach Sortieren. Was also tun?
Z.B. könnte in einer einzigen der Instanzen eine SonderFunktion[-alität] aktiviert werden, so dass diese Instanz mehr tut, als die anderen Instanzen. Wird aber ausgerechnet diese Instanz nicht mehr benutzt, so steht man im Regen.
Darum schwebt mir vor, die erste in einem "Zyklus" benutzte Instanz bekommt diesen SonderStatus.
Was das für ein Zyklus sein könnte, weiss ich nicht. Vielleicht ein OB1 Zyklus?
Verwaltet werden müsste dieser Zyklus z.T. ausserhalb der FB-Instanzen, indem das "zentrale" ZyklusErster-Bit gesetzt wird.
Jede aufgerufene Instanz kopiert das "zentrale" ZyklusErster-Bit in eine lokale Variable zur späteren Verwendung und löscht das "zentrale" ZyklusErster-Bit.
Ist das "lokale" ZyklusErster-Bit TRUE, so wird in dieser Instanz die SonderFunktion[-alität] aktiviert.
Sie geht den belegten Bereich des Array durch und prüft, ob das Benutzt-Bit (das zusätzlich zum Präfix vorhanden sein muss) bei einem der belegten ArrayElemente FALSE ist.
Falls das Benutzt-Bit=TRUE ist, wird es gelöscht und die Prufung mit dem nächsten ArrayEintrag fortgesetzt.
Falls es FALSE ist, wird der Eintrag im Array gelöscht und das Array sortiert.
Vermutlich genügt es, den erstbesten Eintrag mit dem Kennzeichen Benutzt-Bit=FALSE zu löschen und weitere Einträge mit diesem Kennzeichen erst in folgenden Zyklen (nach und nach) zu löschen.
Im "allgemeinen" Teil der FB-Instanz kommt hinzu, dass das Benutzt-Bit bei dem Eintrag, bei dem sich die Instanz wiedergefunden hat, gesetzt werden muss.
Im ersten Zyklus muss noch verhindert werden, dass Einträge im Array gelöscht werden. Dazu ist vermutlich ausser dem "zentralen" ZyklusErster-Bit ein "zentrales" ErsterZyklus-Bit erforderlich.
Mit "zentral" meine ich den Ort, wo auch das Array abgelegt ist.
Die Liste müsste zu einer Tabelle erweitert werden, so dass für das Benutzt-Bit eine eigene Spalte entsteht. Also Array of Struct, of UDT, of "eigenem Datentyp". Wie auch immer.