AGB  ·  Datenschutz  ·  Impressum  







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

Thread mit timer gestartet

Ein Thema von akurka · begonnen am 27. Okt 2014 · letzter Beitrag vom 29. Okt 2014
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Thread mit timer gestartet

  Alt 27. Okt 2014, 14:07
Warum ist sleep eine schlechte Idee?
Wenns nicht der Hauptthread ist dann friert nichts ein und während dem sleep kann sich der Prozessor um andere Prozesse/Threads kümmern wodurch Resourcen gespart werden.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Thread mit timer gestartet

  Alt 27. Okt 2014, 14:16
Warum ist sleep eine schlechte Idee?
Weil Sleep die letzte aller Möglichkeiten sein soll wenn man es nicht besser weis.
Ich verwende lieber meine Methode da ich dann von zeit zu zeit Einfluss nehmen kann auf den Thread, wann eine Aktion ausgeführt werden soll.
Nicht jede Form oder Aktion benötigt eine Wartezeit von 200ms.
Das bremst unterumständen das Programm aus.

PS:
Wenn innerhalb des Threads auf Funktionen der GUI (Form) zugegriffen wird friert das Programm für 200ms ein.

Aber jeder wie er will.

gruss

Geändert von EWeiss (27. Okt 2014 um 14:27 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: Thread mit timer gestartet

  Alt 27. Okt 2014, 14:42
Das bremst unterumständen das Programm aus....Wenn innerhalb des Threads auf Funktionen der GUI (Form) zugegriffen wird friert das Programm für 200ms ein.
Wenn Sleep innerhalb eines Threads ausgeführt wird?? Das will mir nicht so recht einleuchten.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Thread mit timer gestartet

  Alt 27. Okt 2014, 14:49
Das bremst unterumständen das Programm aus....Wenn innerhalb des Threads auf Funktionen der GUI (Form) zugegriffen wird friert das Programm für 200ms ein.
Wenn Sleep innerhalb eines Threads ausgeführt wird?? Das will mir nicht so recht einleuchten.
Hauptthread ist dieser der GUI
Dein Thread hat nichts mit dem der GUI gemein.
Jetzt versuche mal aus deinen Thread einen Label aus der GUI anzusprechen so das er alle 10ms die neue Zeit anzeigt.
Ich denke das dein Thread das Programm einfriert und der Label in dem Fall nicht aktualisiert wird.
Versuchs doch einfach.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Thread mit timer gestartet

  Alt 27. Okt 2014, 14:51
Delphi-Quellcode:
while true do
begin
  Synchronize(LabelSetzen);
  sleep(10);
end;
im Thread und ich bin ziemlich sicher dass es gehn wird
Edit: Ausprobiert - klappt ohne einzufrieren oder sonstige Probleme.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General (27. Okt 2014 um 14:55 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Thread mit timer gestartet

  Alt 27. Okt 2014, 15:00
Na gut ich kenn es anders..
GUI-Elemente dürfen nur im Hauptthread erzeugt und angesprochen werden.. siehe Invoke!
Alles andere friert den Hauptthread ein.
Aber vielleicht verwechsle ich da auch was.

War auch nur ein Vorschlag ob er nun Sleep verwendet oder meinen Vorschlag sei ihm überlassen.
Bei mir ist Sleep die allerletzte Entscheidung wenn es nicht mehr anders geht.

gruss

Geändert von EWeiss (27. Okt 2014 um 15:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Thread mit timer gestartet

  Alt 27. Okt 2014, 15:09
Naja wenn man ohne Synchronize auf die GUI des Hauptthreads zugreift kann es zu Fehlern und ggf. Absturz des Nicht-Hauptthreads führen falls beide Threads plötzlich gleichzeitig auf GUI-Elemente zugreifen. Es friert eigentlich nichts ein. Wäre das sleep(10) nicht im Thread dann würde der Main Thread einfrieren weil Synchronize die entsprechende Methode im MainThread ausführt und das den Thread quasi unnötig machen würde. So führt er das setzen des Labels im MainThread aus, kehrt zurück, wartet 10 MilliSekunden und wiederholt das ganze. Ist also in dem Fall einfach nur eine Art übermäßig komplizierter Timer.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General (27. Okt 2014 um 15:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von akurka
akurka

Registriert seit: 30. Dez 2008
Ort: Schweiz, 8636 Wald ZH
81 Beiträge
 
Delphi 7 Personal
 
#8

AW: Thread mit timer gestartet

  Alt 27. Okt 2014, 15:34
Hallo,
Danke für die viele Beiträge.
Wenn ich Euere Diskusion richtig verstanden habe, darf man den sleep verwenden wenn
man im Thread keine GUI funktionen braucht. Das ist auch bei mir der Fall.
Sonst muss man die API funktion benützen, ist noch wichtig das zu wissen !
Anton Kurka
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#9

AW: Thread mit timer gestartet

  Alt 27. Okt 2014, 16:10
Nicht ganz. Sleep geht immer. Auf die GUI sollte man eigentlich überhaupt nicht aus einem Thread zugreifen, wenn alle Stricke reißen aber bitte dann synchronisiert. Besser aber gar nie und nimmer, das zwingt einen auch gleichzeitig zu einem vernünftig entkoppelten Programmdesign. Ich nutze Sleep() auch sehr viel in Threads, und halte es für eine absolut gängige Methode wenn sichergestellt ist, dass man seinen Thread nicht doch event-gesteuert auch mal zwischen durch beleben möchte. (Wobei ich es auch wieder in die Design-Problem Ecke stellen würde, wenn man EINEN Thread hat, der sowohl zyklisch als auch nach Ereignissen reagieren soll.)
Dass ein Sleep nicht mit in den synchronisierten Abschnitt gehört, sollte eigentlich klar sein. Ansonsten: Schlaf gut!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#10

AW: Thread mit timer gestartet

  Alt 27. Okt 2014, 16:13
Nein. Du kannst Sleep in einem Thread verwenden, auch wenn Du (natürlich indirekt, z.B. über Synchronize) auf GUI-Elemente aus dem Thread heraus zugreifst. Das macht überhaupt nichts.

Na ja, und so ein kleiner Backgroundworker in einem LOB-Tool, was man so mal eben schreibt, verletzt nur heimlich irgendwelche Designregeln. So zum runterschruppeln eines kleinen Tools ist das vollkommen ok.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 10:02 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