AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte AsyncCalls 2.21 - Inlined VCL/Main Thread Synchronisierung
Thema durchsuchen
Ansicht
Themen-Optionen

AsyncCalls 2.21 - Inlined VCL/Main Thread Synchronisierung

Ein Thema von jbg · begonnen am 4. Mai 2008 · letzter Beitrag vom 21. Jun 2008
Antwort Antwort
Seite 4 von 4   « Erste     234   
jbg
Registriert seit: 12. Jun 2002
Wer kennt das nicht. Wenn man mit Threads arbeitet und auf die VCL zugreifen möchte, muss man eine Hilf-Methode schreiben, die dann per Synchronize() aufgerufen wird. Dabei müssen die ganzen Parameter in Felder des Thread-Objekts geschrieben werden, damit sie in der synchronisierten Methoden zur Verfügung stehen.
Dies führt dazu, dass man den Programmfluss nicht ganz so einfach folgen.

Mit AsyncCalls kann man das ganze Problem anders angehen, da dort "inlined VCL synchronization" implementiert ist.
Delphi-Quellcode:
procedure TMyThread.Execute;
var
  S: string;
  I: Integer;
begin
  for I := 0 to 100 do
  begin
    // ...

    { ProgressBar aktualisieren }
    S := IntToStr(I) + '%';
    EnterMainThread;
    try
      Label1.Caption := S;
      ProgressBar1.Position := I;
    finally
      LeaveMainThread;
    end;
  end;
end;
AsyncCalls ermöglicht aber noch mehr. So kann man eine Funktion in einem anderen Thread ablaufen lassen.
Delphi-Quellcode:
procedure MyProc(S: string);

  procedure WorkerThread;
  var
    I: Integer;
  begin
    // Thread beschäftigen
    for I := 0 to 1000000 do
      S := S + ' '; // Zugriff auf S aus der umgebenden Funktion
  end;

var
  a: IAsyncCall;
begin
  a := LocalAsyncCall(@WorkerThread);
  DoSomethingTimeConsuming;
  a.Sync; // ab hier muss S fertig "berechnet" sein
  DoSomething(S);
end;
Homepage, Beschreibung, Download
Angehängte Dateien
Dateityp: zip asynccalls_149.zip (29,8 KB, 58x aufgerufen)
 
Benutzerbild von Zacherl
Zacherl

 
Delphi 10.2 Tokyo Starter
 
#31
  Alt 21. Jun 2008, 22:55
Zitat von jbg:
Zitat von Zacherl:
Funktioniert das ganze auch in mittels CreateThread oder BeginThread erzeugten Threads? Weil du geschrieben hattest, dass letztendlich doch nur die Synchronize Funktion des TThread Objektes aufgerufen wird.
Wie meinst du das? TThread.StaticSynchronize ist eine Klassenmethode, die man auch außerhalb eines TThread Objekts ausrufen kann.
Ahso okay, damit hat sich meine Frage schon erledigt
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 01:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz