Einzelnen Beitrag anzeigen

taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
526 Beiträge
 
Delphi 11 Alexandria
 
#28

AW: Zugriffe auf Objekt aus mehreren Threads - wie richrig synchronisieren?

  Alt 24. Jan 2017, 16:46
Delphi-Quellcode:
        try
          if Assigned(FQueue.Items[0]) then // --> hier ist ein direkter Zugriff auf die "interne" Liste ohne Absicherung
          try
            QueueItem := TapDataReceiverQueueItem(FQueue.Items[0]); // hier ebenfalls
            TapDataReceiver.Create(false, QueueItem.ClientData, QueueItem.Target, QueueItem.Priority); // was ist eigentlich das hier?
          finally
            DeleteFromQueue(0); // hier ist der Zugriff über eine Methode der Klasse mit Absicherung
          end;
Das bedeutet Du mischst Zugriffe auf die Lokale Liste der Klasse (ohne Absicherung) mit Methoden der Klasse (inkl. Absicherung).
Meiner Meinung nach solltest Du die Klasse TapDataReceiverQueue so bauen dass Du aus dem Thread alles mit Klassenmethoden machen kannst (besser MUSST). Zum Beispiel eine Methode Pop um die Objekte zu holen. In der Klasse sicherst Du alles mit der CriticalSection ab. Somit muss sich kein Aufrufer der Methoden um etwas kümmern. Egal aus welchem Thread. Dafür würde sich übrigens die Generische TQueue ev. besser eignen als die TObjectlist.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.

Geändert von taveuni (24. Jan 2017 um 16:49 Uhr)
  Mit Zitat antworten Zitat