AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Das Chrome-Embedded-Framework und die Synchronisierung ohne TThread.Symchronize.

Das Chrome-Embedded-Framework und die Synchronisierung ohne TThread.Symchronize.

Ein Thema von HintByError · begonnen am 6. Jun 2022 · letzter Beitrag vom 7. Jun 2022
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.549 Beiträge
 
Delphi 12 Athens
 
#1

AW: Das Chrome-Embedded-Framework und die Synchronisierung ohne TThread.Symchronize.

  Alt 6. Jun 2022, 21:51
Ist dir nie aufgefallen, dass es mehrere Varianten der Methoden gibt?
Einmal normal und dann nochmal als class-procedure.
Delphi-Referenz durchsuchenTThread.Synchronize
TThread.Synchronize(nil, ....);


Auch wenn es nie die "richtige" TThread-Instanz liefert, selbst wenn es ein Delphi-Thread wäre.
Delphi-Referenz durchsuchenTThread.CurrentThread
TThread.CurrentThread.Synchronize(...);
Wobei das CurrentThread immer ein TExternalThread ist und dort nicht alles funktioniert, wie z.B. Terminate, da Terminate nur eine Variable setzt, was hier nichts bringt, weil es ja eine andere Instanz ist.

PS: GetCurrentThreadId vs. TThread.CurrentThread.ThreadId (Letzteres für Multiplatform-Code, aber im Windows würde ich eher Ersteres verwenden)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 6. Jun 2022 um 21:58 Uhr)
  Mit Zitat antworten Zitat
HintByError

Registriert seit: 13. Dez 2018
Ort: Marburg
22 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Das Chrome-Embedded-Framework und die Synchronisierung ohne TThread.Symchronize.

  Alt 6. Jun 2022, 22:24
Das Eigenschaftfeld TThread.CurrentThread ist mir durch Deinen Hinweis das erstmals aufgefallen.
Danke dafür. Ich werde es damit auch mal ausprobieren.
Wolfgang Sauer
  Mit Zitat antworten Zitat
HintByError

Registriert seit: 13. Dez 2018
Ort: Marburg
22 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Das Chrome-Embedded-Framework und die Synchronisierung ohne TThread.Symchronize.

  Alt 7. Jun 2022, 11:32
Man bekommt die Sache mit „TThread.Synchronize(nil,showPnlDownloadFeature)“ zum laufen. Allerdings mit einer Einschränkung: der Aufruf von „Application.ProcessMessages;“ ist dann in „showPnlDownloadFeature“ nicht möglich. Die auf „TTimer“ basierende Lösung erlaubt also mehr Zugriffe.
Prinzipiell ist eine Parameterübergabe von lokalen Variablen der nebenläufigen Thread-Prozedur an den Haupt-Thread nicht möglich, sondern man muss globale Variablen auf dem Heap oder im Datensegment verwenden. Damit verschiedene Threads, die die gleiche Methode als Ereignis zur Folge haben, bei dem Zugriff auf die Parameterübergabe an den Haupt-Thread nicht kollidieren, ist eine Zugriffssperre mittels „Interlocked.Increment“ notwendig. Bei der „TTimer“-Variante ist dies mit mittels der Eigenschaft „Enabled“ der „TTimer“-Instanz gelöst.

Code für die Auslösung der Synchronisierung:
Delphi-Quellcode:
  if not downloadInProgress and (downloadItem.FullPath <> '') then begin
    try
      repeat until (TInterLocked.Increment(lockcount)=1);
//Zugriffsmöglichkeit abwartem und sperren
      latestDownload := copy(downloadItem.FullPath, 1,
        Length(downloadItem.FullPath));
//Parameterübergabe mit globaler Variable an „showPnlDownloadFeature“
    except //Fehlerbehandlung:
      TInterLocked.Decrement(lockcount);
      raise;
    end;
    TThread.Synchronize(nil,showPnlDownloadFeature);
//Synchronisieren mit dem Haupt-Thread, wenn kein Fehler.
  end;
Anweisungen in „showPnlDownloadFeature“:
Delphi-Quellcode:
  try
    pnlDownloadFeature.Visible := true;
    btnDownloadFeature.Caption := ExtractFileName(latestDownload) + ' laden';
//Visualisierung und Schaltfläche für Download zugänglich machen
// Application.ProcessMessages;//bei Synchronize nicht erlaubt
    Chrome.SetFocus(true);
  finally
    TInterLocked.Decrement(lockcount);
//Sperre aufheben, da Parameter ab hier nicht mehr ausgewertet werden.
  end;
Wolfgang Sauer
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz