Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#9

AW: Variable eines Record geht beim Multithreading verloren

  Alt 28. Nov 2024, 21:58
Dann macht für mich allerdings keinen Sinn, warum der Integer i weiterhin geschrieben werden kann.

Setzt Delphi strings auf '' wenn sie out of scope gehen und bei Integern wird nur der Speicher nur für Wiederverwendung freigegeben, aber nicht auf 0 gesetzt?
Wenn das Zutrifft, ist es dann einfach nur Zufall, dass der Speicher des Integer einfach nicht wiederverwendet wurde und deshalb die Zahl die gleiche ist?
Nein. Was hier zum Tragen kommt nennt sich Variablenbindung anonymer Methoden (Stichwort Closure). Die Verwendung der Variablen innerhalb der anonymen Methode sorgt intern dafür, dass die Variable nicht wie üblich im lokalen Bereich der umgebenden Methode gespeichert wird, sondern in einem separaten Bereich, der im Scope der anonymen Methode(n) liegt.

In deinem Beispiel werden p und i im Closure erfasst weil sie als Variablen deklariert sind. Der Parameter wird zwar auch erfasst, ist aber eine Instanz einer TMessage-Klasse, die nach dem SendMessage wieder freigegeben wird. Daher enthält sie beim späteren Ausführen der Queue-Methode einen undefinierten Inhalt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat