Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: For-Schleife im Thread wird nur einmal abgearbeitet

  Alt 10. Jun 2014, 11:26
Der Zugriff in der for-Schleife erfolgt eben nicht synchronisiert
Die erste Verwendung von frm_main.lv_waagen.Items.Count-1 ist nicht synchronisiert, die zweite schon.
Warum?
Weil du das so programmiert hast?
Delphi-Quellcode:
      FCS.Acquire;
      // nicht synchronisierter Zugriff auf eine VCL-Komponente
      for I := 0 to frm_main.lv_waagen.Items.Count-1 do
      begin
        Synchronize(
          Procedure
          begin
            // hier ist es synchronisiert
            frm_main.Writelog('Sende Register '+inttostr(i)+' von '+inttostr(frm_main.lv_waagen.Items.Count-1));
          end
        );
        FTCPClient.SendCmd('Register:'+frm_main.lv_waagen.Items[i].SubItems[2]+':@');
      end;
      FCS.Release;
Wobei diesesa andauernde Zugriff auf frm_main (und dann auch noch globale Variable ) sagen wir mal: potential zur Verbesserung bietet.
Wie kann man denn besser innerhalb des Threads auf Variablen / Daten des Hauptthreads (oder möglichweise auch anderen Threads) zugreifen?

Ich kenne bisher nur die Möglichkeit Daten an den Hauptthread mit Synchronize sicher zu übergeben.
Geht das mit Funktionen auch? Ich kenne das nur mit procedure.
Ab besten gar nicht, sondern man übergibt dem Thread die Informationen, die er zum Laufen braucht und der arbeitet das ab.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat