AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Code vom Thread in einen Timer umziehen?
Thema durchsuchen
Ansicht
Themen-Optionen

Code vom Thread in einen Timer umziehen?

Ein Thema von Jim Carrey · begonnen am 25. Okt 2016 · letzter Beitrag vom 25. Okt 2016
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 10:09
Nein, das wäre besser, denn somit hat dein Thread nur z.B. einen Wert "FortschrittInProzent" und muss sich gar nicht mit solchen Feinheiten wie Progressbars und ähnlichem auseinandersetzen. Außerdem kannst du mit dem Timer das Aktualisierungs-Intervall für die Anzeige komfortabel und unabhängig vom eigentlichen Thread regeln. Auch Dinge wie "Wenn die Anwendung minimiert ist brauche ich die Anzeige auch nicht zu aktualisieren" sind dort gut untergebracht. Packst du das alles in deinen Thread siehst du dort bald den Wald vor lauter Bäumen nicht mehr weil er sich nur noch zu 10% um seine eigentliche Aufgabe kümmert und der Rest mit eigentlich ganz anderem Anzeige-Kram vollgestopft ist.
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#2

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 10:13
Ok verstanden. Dazu muss ich was sagen, hatte ich vergessen!

Ich habe zwei Threads. Der eine macht die ganze Arbeit die zu erledigen ist und der zweite ließt die Variablen aus, welche im ersten gesetzt werden.
Und nur wenn der eventuelle neue Wert der ProgressBar größer ist als der alte, wird auch tatsächlich die GUI verändert.

Zitat:
"Wenn die Anwendung minimiert ist brauche ich die Anzeige auch nicht zu aktualisieren"
Würde ich verdammt gerne machen, geht momentan aber nicht, da ich nach dem Start der "Arbeit" eine while-Schleife habe die auf die Beendigung der Threads wartet.
Ich weiß, das ist harter Tobak und echt nicht schön aber leider noch ein Relikt aus früheren Zeiten meines Codes. Werde ich irgendwann mal abändern.

Edit:
ich sehe gerade dass ich sowas doch eingebaut habe. Aber ich prüfe nicht auf "bist du minimiert" sondern "bist du im Systembereich versteckt".

Geändert von Jim Carrey (25. Okt 2016 um 10:16 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 10:20
Den zweiten Thread kann man sich dann echt sparen, der Teil wäre dann, wie gesagt, eigentlich doch in einem Timer super aufgehoben.
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#4

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 10:26
Was hätte der Timer denn dann für einen Vorteil gegenüber dem Thread?

Da oben mit der while-Schleife hab ich übrigens Quatsch geschrieben. Hab mir dem alten Code nochmal angesehen und funktioniert alles bestens mit "Wenn du mich nicht siehst, ändere mich auch nicht" (hat halt nur den Nachteil, dass man bei den Aero-Vorschaufenstern keine Änderung mehr wahrnimmt).
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#5

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 10:29
geht momentan aber nicht, da ich nach dem Start der "Arbeit" eine while-Schleife habe die auf die Beendigung der Threads wartet.
wartet der Haupt-Thread auf das Ende vom Job-Thread in einer While Schleife, mit Sleep() und ProcessMessages()?.
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#6

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 10:30
Was hätte der Timer denn dann für einen Vorteil gegenüber dem Thread?
Im Timer Event kann sich mit dem UI ohne Synchronize() unterhalten. Der Thread nicht.
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#7

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 10:33
Zitat:
wartet der Haupt-Thread auf das Ende vom Job-Thread in einer While Schleife, mit Sleep() und ProcessMessages()?.
Beides. Ich benutze eine gut angepasste Sleep-Version von negaH (so heißt er hier im Forum).

Zitat:
Im Timer Event kann sich mit dem UI ohne Synchronize() unterhalten. Der Thread nicht.
Bringt das auch Performance-Vorteile (weniger CPU-Last etc) wenn man das Synchronize() nicht mehr braucht?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#8

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 10:41
Polling (und nichts anderes soll der Timer ja anscheinend tun) bringt wenn überhaupt nur selten Performancevorteile.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#9

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 10:42
Zitat:
Im Timer Event kann sich mit dem UI ohne Synchronize() unterhalten. Der Thread nicht.
Bringt das auch Performance-Vorteile (weniger CPU-Last etc) wenn man das Synchronize() nicht mehr braucht?
Ja, der Thread läuft immer. Der Timer nur, wenn er getriggert wird.
Man könnte es noch etwas optimieren, wenn der Thread den Timer erst einschaltet, wenn es auch eine Änderung gab.
Also im dem Stil:
Delphi-Quellcode:
TThread.Synchronize(nil, procedure ()
 begin
   MainForm.Progress := Self.Progress;
   MainFrom.Timer.Enabled := True;
 end);
Der Timer triggert dann nach der Zeit und schaltet sich selbst erst einmal wieder ab.
  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 00:26 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