AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung iOS Grafische Ausgabe aus einem Thread heraus

Grafische Ausgabe aus einem Thread heraus

Ein Thema von amigage · begonnen am 23. Mai 2019 · letzter Beitrag vom 24. Mai 2019
Antwort Antwort
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
270 Beiträge
 
Delphi 11 Alexandria
 
#1

Grafische Ausgabe aus einem Thread heraus

  Alt 23. Mai 2019, 15:08
Hallo,

ich weiß, dass man in Threads nicht auf die GUI zugreifen darf und dies nur im Synchronize() Abschnitt bewerkstelligen soll.
Wie bekomme ich es aber hin, dass Ausgaben während des Thread Ablaufs möglich sind?

Der nachfolgende Code ist jetzt ein simples Beispiel.
In meinem Fall dauert der Thread ca. 5 Sekunden. In der Zeit soll ausgegeben werden, an welcher Stelle der Abarbeitung die App sich gerade befindet.

Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
begin
  TThread.CreateAnonymousThread(procedure ()
  begin

    for var i: integer := 0 to 1000 do
    begin
      lblOutput.Text := i.ToString; // problematische Ausgabe
    end;

    TThread.Synchronize (TThread.CurrentThread,
      procedure ()
      begin
        lblOutput.Text := 'Finished';
      end);
  end).Start;
end;
Danke.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Grafische Ausgabe aus einem Thread heraus

  Alt 23. Mai 2019, 15:09
.. geht auf iOS sendMessage, postMessage oder events?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Grafische Ausgabe aus einem Thread heraus

  Alt 23. Mai 2019, 15:53
Genauso wie skizziert mit Synchronize.
Man muss ja nicht jeden Quatsch synchronisieren und nur jede zweite bis zehnte Änderung der GUI mitteilen.
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
270 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Grafische Ausgabe aus einem Thread heraus

  Alt 24. Mai 2019, 09:43
Ich habe es nun selbst herausgefunden. TThread.Queue() ist die Lösung

Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
begin
  TThread.CreateAnonymousThread(procedure ()
  begin

    for var i: integer := 0 to 1000 do
    begin
      TThread.Queue(nil, procedure
      begin
        lblOutput.Text := i.ToString; // problematische Ausgabe
      end);
    end;

    TThread.Synchronize(TThread.CurrentThread, procedure ()
    begin
      lblOutput.Text := 'Finished';
    end);
  end).Start;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Grafische Ausgabe aus einem Thread heraus

  Alt 24. Mai 2019, 13:10
Ich habe es nun selbst herausgefunden. TThread.Queue() ist die Lösung
Man muss ja nicht jeden Quatsch synchronisieren und nur jede zweite bis zehnte Änderung der GUI mitteilen.
Oder nur 25x pro sekunde...
  Mit Zitat antworten Zitat
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 02:52 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