AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf TProgressbar.Position aus TThread.Queue

Ein Thema von TurboMagic · begonnen am 19. Sep 2022 · letzter Beitrag vom 21. Sep 2022
Antwort Antwort
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.855 Beiträge
 
Delphi 12 Athens
 
#1

Zugriff auf TProgressbar.Position aus TThread.Queue

  Alt 19. Sep 2022, 21:09
Benutze D11.2 und Versuche mittels TThread.Queue ein Progressbar aus einem Task heraus zu aktualisieren. Das crasht jedoch. Ein Label das in der selben Methode den selben Wert ausgibt crasht nicht.

Woran kann es liegen?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.051 Beiträge
 
Delphi 12 Athens
 
#2

AW: Zugriff auf TProgressbar.Position aus TThread.Queue

  Alt 19. Sep 2022, 21:18
Benutze D11.2 und Versuche mittels TThread.Queue ein Progressbar aus einem Task heraus zu aktualisieren. Das crasht jedoch. Ein Label das in der selben Methode den selben Wert ausgibt crasht nicht.

Woran kann es liegen?
Wie genau machst du es?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zugriff auf TProgressbar.Position aus TThread.Queue

  Alt 20. Sep 2022, 01:55
https://www.delphipraxis.net/196442-...ml#post1512030
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
482 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Zugriff auf TProgressbar.Position aus TThread.Queue

  Alt 20. Sep 2022, 06:16
Und wenn du es mit TTask.Run machst? (Vergiss nicht das Synchronize, ansonsten ruft der das aus einem anderen Thread auf!)
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zugriff auf TProgressbar.Position aus TThread.Queue

  Alt 20. Sep 2022, 08:32
Delphi-Referenz durchsuchenTThread.Queue = Synchronize .... nur nicht jetzt, sondern später

Darum ist auch das Wie wichtig.
z.B. Variable benutzen, die es "dann" nicht mehr gibt = ungünstig
oder Variable benutzen, die "dann" im Thread überschrieben sein/werden kann = ungünstig, weil nicht mehr synchron
oder ...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (20. Sep 2022 um 08:34 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.855 Beiträge
 
Delphi 12 Athens
 
#6

AW: Zugriff auf TProgressbar.Position aus TThread.Queue

  Alt 20. Sep 2022, 11:29
Sitze gerade vor einem anderen PC aber im Prinzip so:

Delphi-Quellcode:
type
  TOnProgress = procedure(Sender: TObject; Progress: UInt32) of Object;

  TMyWorker = class(TObject)
  private
   FOnProgress : TOnProgress;
   procedure ReportProgress(Progress: UInt32);
  public
    procedure DoIt;
    property OnProgress : TOnProgress read FOnProgress write FOnProgress;
  end;

procedure TMyWorker.Dot;
begin
  TTask.Run(
    for var i := 0 to 100 do
    begin
      ReportProgress(i);
      sleep(50);
    end);
end;

procedure TMyWorker.ReportProgress(Progress: UInt32);
begin
  TThread.Queue(procedure
                 if Assigned(FOnProgress) then
                   FOnProgress(self, Progress);
                end);
end;

[..]

TMainForm = class(TForm)
  pb_Progrsss : TProgressBar;
  Label1: TLabel;
private
  FWorker : TMyWorker ;
public
  procedure OnProgress(Sender: TObject; Progress: UInt32);
  procedure DoSomething;
end;

[..]

procedure TMainForm.OnProgress(Sender: TObject; Progress: UInt32);
begin
  Label1.Caption := Progress.ToString;
  pb_Progress.Position := Progress;
end;

procedure TMainForm.DoSomething;
begin
  FWorker.DoIt;
end;
So ungefähr. Ja, was wirklich im Task läuft ist noch etwas demo mäßig und wird später ersetzt.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#7

AW: Zugriff auf TProgressbar.Position aus TThread.Queue

  Alt 20. Sep 2022, 19:18
Naja bei mir war es anders. Ich versuche nicht direkt aus einem Thread heraus die ProgressBar zu setzen. Ich gehe da über PostMessage.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.855 Beiträge
 
Delphi 12 Athens
 
#8

AW: Zugriff auf TProgressbar.Position aus TThread.Queue

  Alt 20. Sep 2022, 20:50
Komisch, ich habe jetzt das gewünschte Testprogramm geschrieben, siehe Anhang.
Nur: es knallt da nicht beim Zugriff auf den Progressbar, das Label wird aber
nie aktualisiert

Bin verwirrt.

Grüße

TurboMagic
Angehängte Dateien
Dateityp: zip QueueTest.zip (90,7 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.368 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Zugriff auf TProgressbar.Position aus TThread.Queue

  Alt 20. Sep 2022, 20:53
Nur: es knallt da nicht beim Zugriff auf den Progressbar, das Label wird aber
nie aktualisiert
Da du im Kontext des Hauptthreads (in Queue) ein Sleep drin hast, blockierst du den Hauptthread.

Ja, bei mir gibt es auch keinen Fehler. Da muss etwas anderes los sein. Kannst du vielleicht einen Screenshot von Delphi machen, wenn der Fehler im echten Projekt auftritt? Damit man den Stacktrace usw. sieht?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:34 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