Hallo, Jan -
je länger ich über das Thema nachdenke, um so mehr komme ich zu der Überzeugung, dass LOCALs beim Aufruf der Funktion initialisiert werden, und nach dem Verlassen der Funktion der Garbage Collector sich drum kümmert, was mit den Inhalten der LOCALs passiert.
Und ich bin auch überzeugt (was leider auch bedeutet, dass ich es nicht beweisen kann
), dass bei jedem Aufruf einer bestimmten Funktion deren LOCALs auf einen anderen Speicherplatz gesetzt werden. Ich versuche mal, das zu erklären: gesetzt sei eine Funktion, die eine Datei, deren Namen als Parameter übergeben wird, öffnet, den Dateiinhalt liest, die Datei schliesst und den Dateiinhalt als String zurückgibt.
Nehmen wir die LOCAL nHandle, in der der Datei-Handle abgelegt wird. Diese Variable zeigt auf den Speicherplatz 123456. Jetzt arbeitet unser Programm mit Threads, und die Funktion wird gleichzeitig von zwei verschiedenen Threads aufgerufen und soll zwei verschiedene Dateien auslesen. Dann würden in beiden Threads die Variable nHandle (obwohl sie verschiedene Werte enthalten würde) am Speicherplatz 123456 nutzen und die Funktions-Instanz, die als zweite gestartet wird, würde den Wert der ersten Instanz überschreiben. Das kann so nicht gewollt sein, und meine Erfahrung mit Threads unter Xbase++ zeigt, dass das auch nicht passiert.
Von daher bin ich der Überzeugung, dass bei jedem Aufruf einer Funktion die LOCALs auf neue Speicherplätze gemappt werden.