Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Statusabfragen ständig ausführen? (https://www.delphipraxis.net/23453-statusabfragen-staendig-ausfuehren.html)

feiadragon 3. Jun 2004 13:44


Statusabfragen ständig ausführen?
 
HI,

mein problem:
also ich hab mein program, einen thread, von dem ich nicht sicher bin ob der läuft :-) oder nicht, deshalb will ich das program ständig überprüfen lassen ob der thread läuft oder nicht und da irgendwie ne statusmeldung in die Form einbauen...

aber wie macht man, das der dieses überprüfen immer durch rattert und nicht nur bei bestimmten events?

MfG, feiadragon

PS: richtige sparte? bin mir nicht sicher :-( , ich mein das entscpricht doch auch eigentlich nicht der oop programmierung oder?

glkgereon 3. Jun 2004 13:47

Re: Statusabfragen ständig ausführen?
 
ich wü+rd davon ausgehen, das der thread läuft, und wenn der thread beendet wird macht er sich als letzte aktion bemerkbar

zb mit sendmessage

feiadragon 3. Jun 2004 20:04

Re: Statusabfragen ständig ausführen?
 
Danke Gereon das du mir die Antwort in ein Forum postest :roll: :wink: und mir nicht einfach morgen in der schule sagst...

Nee aber ich will ja das ja nicht nur für den thread, das war nur nen beispiel.

Chewie 3. Jun 2004 20:34

Re: Statusabfragen ständig ausführen?
 
Generell bietet sich ein Timer an. Damit kanst du in periodischen Abständen etwas tun, z.B. deinen Thread abzufragen.

Luckie 4. Jun 2004 11:28

Re: Statusabfragen ständig ausführen?
 
Zitat:

Zitat von Chewie
Generell bietet sich ein Timer an. Damit kanst du in periodischen Abständen etwas tun, z.B. deinen Thread abzufragen.

Dann kann er ja auch gleich wieder für die Arbeit das Timer-Ereignis nehmen. :roll:

Chewie 4. Jun 2004 13:41

Re: Statusabfragen ständig ausführen?
 
Zitat:

Zitat von Luckie
Dann kann er ja auch gleich wieder für die Arbeit das Timer-Ereignis nehmen. :roll:

Ja, eben. Wo ist das Problem??

Luckie 4. Jun 2004 14:07

Re: Statusabfragen ständig ausführen?
 
Das ein Thread für so Polling Aufgaben etwas geeigneter ist.

Chewie 4. Jun 2004 15:10

Re: Statusabfragen ständig ausführen?
 
Schon, aber dann finge die ganze Sache von vorne an.

Luckie 4. Jun 2004 15:49

Re: Statusabfragen ständig ausführen?
 
Wo ist das problem? dann soll der Thread eben selber anzeigen, dass er noch läuft: http://www.delphi-forum.de/viewtopic...=153816#153816

feiadragon 4. Jun 2004 18:14

Re: Statusabfragen ständig ausführen?
 
Ja das is ja irgendwie die beste möglichkeit...
muss ich mal einbasteln :gruebel:

BKempf 4. Jun 2004 23:54

Re: Statusabfragen ständig ausführen?
 
Ich hatte neulich ein aehnliches Problem, das ich mit

Delphi-Quellcode:
repeat
  Application.ProcessMessages;
until Terminated or ButtonGeklickt;
geloest hatte. Das Ganze lief in einem Thread (daher die Abfrage auf Terminated) und sollte auf einen Button warten.
Das Ganze funktionierte zwar zunaechst, stellte sich an anderer Stelle jedoch als unausgegorener Hack heraus (u.a. 100% CPU-Auslastung) und stattdessen wird die Variable jetzt in regelmaessigen Abstaenden mit einem Timer abgefragt :-)

Ich denke, ein Timer ist auch bei deinem Problem angebracht. Der koennte dann sowas testen wie (ungetestet):

Delphi-Quellcode:
if Thread.Terminated then
begin
  if Assigned(Thread.FatalException) then
    Protokoll('Thread ist gestorben');
end;
Alternativ gibt es auch das OnTerminate-Ereignis, das du dafuer einspannen koenntest.

Luckie 5. Jun 2004 12:57

Re: Statusabfragen ständig ausführen?
 
Zitat:

Zitat von BKempf
Delphi-Quellcode:
repeat
  Application.ProcessMessages;
until Terminated or ButtonGeklickt;

Wenn das ganze schon in einem separaten Thread läuft, warum dann Application.ProcessMessages? :gruebel:

Chewie 5. Jun 2004 13:32

Re: Statusabfragen ständig ausführen?
 
Und sinnvoller wäre es, den Thread bei dem ButtonKlick zu beenden als im Thread den Status einer globalen Variable abzufragen.

BKempf 6. Jun 2004 14:38

Re: Statusabfragen ständig ausführen?
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von BKempf
Delphi-Quellcode:
repeat
  Application.ProcessMessages;
until Terminated or ButtonGeklickt;

Wenn das ganze schon in einem separaten Thread läuft, warum dann Application.ProcessMessages? :gruebel:

Andere Threads (und sogar der entsprechende Thread selbst) könnten, auch während einer auf einen Buttonklick wartet, Daten über die serielle Schnittstelle empfangen. Die Anweisung sorgt dafür, daß die entsprechenden Events nicht verlorengehen bzw. ewig verzögert werden.
Das Programm muss mehr oder weniger in Echtzeit (spätestens alle paar Sekunden) Daten empfangen und auswerten.

Luckie 6. Jun 2004 14:43

Re: Statusabfragen ständig ausführen?
 
Was hat der separate Thread mit anderen Thread zu tun, die auf Ereignisse warten? Desweiteren bin ich mir gar nicht so sicher, ob Application.Processmessages in einem nicht Hauptthread überhauot etwas bewirkt. Das setzt ja vorraus, dass der Thread eine Messageloop besitzt.

BKempf 6. Jun 2004 18:46

Re: Statusabfragen ständig ausführen?
 
Zitat:

Zitat von Luckie
Was hat der separate Thread mit anderen Thread zu tun, die auf Ereignisse warten? Desweiteren bin ich mir gar nicht so sicher, ob Application.Processmessages in einem nicht Hauptthread überhauot etwas bewirkt. Das setzt ja vorraus, dass der Thread eine Messageloop besitzt.

Ich hatte das auch ohne Application.ProcessMessages ausprobiert, aber dabei hagelte es dann Timeouts; sobald der Button dann gedrueckt wurde, wurde das angeschlossene Geraet mit den gesammelten Anfragen aus der Wartezeit ueberschwemmt und verschluckte sich daran.
Getestet hatte ich das nur mit einem Geraet, aber mit mehreren waer das dann ja eh schiefgegangen.
Aber wie gesagt, ist inzwischen eh anders geloest :-)

feiadragon 7. Jun 2004 09:57

Re: Statusabfragen ständig ausführen?
 
HI Leute,

habs jetzt so gemacht wie es Luckie am Anfang mal angedeutet hatte:
Im Thread setze ich einfach die Caption eines Labels auf 'Thread läuft'...
Primitiv aber geht...

DAs mit den Timern werd ich auch mal ausprobieren.

Ganz nebenbei, hab ich jetzt schon häufiger gehört, was bringt das application.processmessages????

Thx, feiadragon

Stevie 7. Jun 2004 10:13

Re: Statusabfragen ständig ausführen?
 
Zitat:

Zitat von Delphi-Hilfe
Mit der Methode ProcessMessages können Sie eine Anwendung unterbrechen, so daß die Ereigniswarteschlange verarbeitet werden kann.

procedure ProcessMessages;

Beschreibung

Durch einen Aufruf von ProcessMessages ermöglichen Sie der Anwendung, die Ereignisse in der Warteschlange abzuarbeiten.

Hinweis

ProcessMessages ermöglicht nicht, daß die Anwendung in den Leerlauf übergeht. Hier liegt ein Unterschied zu HandleMessage.

Das wird zum Beispiel gemacht, wenn etwas rechenintensives durchgeführt wurde aber die Anwendung weiter auf Benutzereingaben reagieren soll.

feiadragon 7. Jun 2004 10:44

Re: Statusabfragen ständig ausführen?
 
Achso,

ich dachte dafür bräuchte man nen anderen Thread, aber man lernt nie aus :-D :-D

Tyrael Y. 7. Jun 2004 10:56

Re: Statusabfragen ständig ausführen?
 
mal so nebenbei...

bei solch einem Konstrukt bringt Application.ProcessMessages ziemlich gar nix
aber folgendes sollte am Ende der Schleife immer stehen

Delphi-Quellcode:
repeat
.
.
.

Sleep(100);
until Terminated;
..durch das Sleep kreigen andere Prozesse Rechnerzeit und man verhindert einen Deadlock,
falls andere Threads wichtige Aufgaben noch zu erledigen haben

;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 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