AGB  ·  Datenschutz  ·  Impressum  







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

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
Seite 2 von 6     12 34     Letzte » 
Jim Carrey
(Gast)

n/a Beiträge
 
#11

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 11: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.261 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 11: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
 
#13

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 11: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
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.261 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 11:47
Wie wäre es mit TThread.Queue?
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
Jim Carrey
(Gast)

n/a Beiträge
 
#15

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 12:00
Bevor ich mich Queue widme eine Verständnisfrage:
- muss ich auch das Ändern des Hints und das Ändern des Icons des Tray-Icons meiner Anwendung sychronisieren?
- muss ich auch einfaches "besorgen von Informationen" synchronisieren? Zum Beispiel das Besorgen der Caption eines Labels?
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#16

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 12:02
Wie wäre es mit TThread.Queue?
Der Führt dann die Methode immer aus. D.h. bei jedem noch so kleinen Progress, wird die Methode gerufen.
Die Timer-Lösung macht ein Update nur einmal in der vorgegebenen Zeit, egal wie oft der Timer eingeschaltet wurde.
Das bringt ein wenig "Ruhe" rein
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#17

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 12:03
Bevor ich mich Queue widme eine Verständnisfrage:
- muss ich auch das Ändern des Hints und das Ändern des Icons des Tray-Icons meiner Anwendung sychronisieren?
- muss ich auch einfaches "besorgen von Informationen" synchronisieren? Zum Beispiel das Besorgen der Caption eines Labels?
Ja und Ja.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.261 Beiträge
 
Delphi 10.4 Sydney
 
#18

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 12:05
Ich habe das Gefühl, ich verstehe die Problemstellung nicht richtig, oder andere haben ein eigenes Verständnis von Threads. Ich persönlich war zumindest noch nie in der Verlegenheit, einen Thread pollen zu müssen, das kommt mir so "von hinten durch die Brust ins Auge" vor.
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
Der schöne Günther

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

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 12:07
Und genau das ist der Punkt den ich meine. Siehst du wie aufwändig und fummelig das jetzt schon wird? Lass den Thread die eigentliche Arbeit machen, mach deine Oberflächen-Aktualisierungen in einem Timer und du bist schon fertig.
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
439 Beiträge
 
Delphi 10.3 Rio
 
#20

AW: Code vom Thread in einen Timer umziehen?

  Alt 25. Okt 2016, 12:24
Mein Senf dazu:

Gib dem Arbeiterthread ein Event-Property.
Definiere im Form eine Aktualisierungsprozedur.
Weise diese Aktualisierungsprozedur dem Thread-Property zu.
Lass den Thread entscheiden, ob sein Zustand eine Aktualisierung rechtfertigt. Wenn ja, dann das Property (die Aktualisierungsprozedur) mittels Synchronize aufrufen.
In der Aktualisierungsprozedur prüfst Du, ob die Form sichtbar ist und machst die Aktualisierungen oder nicht.

Damit ist erreicht, daß dem Thread die Form nicht bekannt sein muß und es gibt eine klare Zuständigkeitstrennung.
Nr.1 Delphi-Tool: [F7]
  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 +2. Es ist jetzt 20:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf