Angenommen, eine Multi-Threaded-Umgebung und eine (richtig synchronisiert) Klasse, die ein bestimmtes Verfahren hatVergleich Funktion und Multithreading
procedure SortKeyList (KeyList : TList <Integer>; Inverted : Boolean);
, das eine Liste von Schlüsseln nimmt und sortiert sie. Das Verfahren nutzt die RTL quicksort Implementierung TList.Sort:
KeyList.Sort (TComparer <Integer>.Construct (CompareKeys))
Nun zum Problem: CompareKeys hat einige Mitglieder der Klasse, um den Zugriff auf die Liste (das ist der springende Punkt bei dieser Klasse) zu sortieren. Aber das RTL erfordert CompareKeys, um eine normale Funktion zu sein. Wie kann ich Daten aus dem Objekt thread-sicher an die CompareKeys-Funktion übergeben? Offensichtlich ist die Verwendung globaler Austauschvariablen keine Option, da sie in keiner Weise Thread-sicher ist.
Irgendwelche Ideen dazu?
+1 große Antwort. Anonyme Methoden mit ihrer Fähigkeit, auf den aufrufenden Kontext zuzugreifen, geben mir genau das, was ich brauche! Hab nicht daran gedacht! Vielen Dank! – jpfollenius