Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Thread mit timer gestartet (https://www.delphipraxis.net/182462-thread-mit-timer-gestartet.html)

Neutral General 27. Okt 2014 14:51

AW: Thread mit timer gestartet
 
Delphi-Quellcode:
while true do
begin
  Synchronize(LabelSetzen);
  sleep(10);
end;
im Thread und ich bin ziemlich sicher dass es gehn wird :wink:
Edit: Ausprobiert - klappt ohne einzufrieren oder sonstige Probleme.

EWeiss 27. Okt 2014 15:00

AW: Thread mit timer gestartet
 
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

Neutral General 27. Okt 2014 15:09

AW: Thread mit timer gestartet
 
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.

EWeiss 27. Okt 2014 15:13

AW: Thread mit timer gestartet
 
Zitat:

wartet 10 Sekunden und wiederholt das ganze
OK ;)
Aber du meinst wohl 10ms.. Flüchtigkeitsfehler. :)

gruss

Neutral General 27. Okt 2014 15:21

AW: Thread mit timer gestartet
 
Eh ja genau, habs korrigiert :mrgreen:

EWeiss 27. Okt 2014 15:23

AW: Thread mit timer gestartet
 
Zitat:

Zitat von Neutral General (Beitrag 1277549)
Eh ja genau, habs korrigiert :mrgreen:

:thumb:
Ok das musste sein ;)

gruss

DeddyH 27. Okt 2014 15:24

AW: Thread mit timer gestartet
 
Man hätte auch einfach den Code ändern können ;)
Delphi-Quellcode:
sleep(10000);

EWeiss 27. Okt 2014 15:25

AW: Thread mit timer gestartet
 
Zitat:

Zitat von DeddyH (Beitrag 1277553)
Man hätte auch einfach den Code ändern können ;)
Delphi-Quellcode:
sleep(10000);

LOL

gruss

akurka 27. Okt 2014 15:34

AW: Thread mit timer gestartet
 
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 !

Medium 27. Okt 2014 16:10

AW: Thread mit timer gestartet
 
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!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 Uhr.
Seite 2 von 3     12 3      

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