AGB  ·  Datenschutz  ·  Impressum  







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

Statusabfragen ständig ausführen?

Ein Thema von feiadragon · begonnen am 3. Jun 2004 · letzter Beitrag vom 7. Jun 2004
Antwort Antwort
Seite 2 von 2     12   
BKempf

Registriert seit: 1. Jun 2004
103 Beiträge
 
Delphi 6 Enterprise
 
#11

Re: Statusabfragen ständig ausführen?

  Alt 5. Jun 2004, 00:54
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Statusabfragen ständig ausführen?

  Alt 5. Jun 2004, 13:57
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Statusabfragen ständig ausführen?

  Alt 5. Jun 2004, 14:32
Und sinnvoller wäre es, den Thread bei dem ButtonKlick zu beenden als im Thread den Status einer globalen Variable abzufragen.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
BKempf

Registriert seit: 1. Jun 2004
103 Beiträge
 
Delphi 6 Enterprise
 
#14

Re: Statusabfragen ständig ausführen?

  Alt 6. Jun 2004, 15:38
Zitat von Luckie:
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?
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.
The problem with troubleshooting is that sometimes the trouble shoots back.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: Statusabfragen ständig ausführen?

  Alt 6. Jun 2004, 15:43
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
BKempf

Registriert seit: 1. Jun 2004
103 Beiträge
 
Delphi 6 Enterprise
 
#16

Re: Statusabfragen ständig ausführen?

  Alt 6. Jun 2004, 19:46
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
The problem with troubleshooting is that sometimes the trouble shoots back.
  Mit Zitat antworten Zitat
feiadragon

Registriert seit: 14. Apr 2004
Ort: bei Köln
20 Beiträge
 
#17

Re: Statusabfragen ständig ausführen?

  Alt 7. Jun 2004, 10:57
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
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#18

Re: Statusabfragen ständig ausführen?

  Alt 7. Jun 2004, 11:13
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
feiadragon

Registriert seit: 14. Apr 2004
Ort: bei Köln
20 Beiträge
 
#19

Re: Statusabfragen ständig ausführen?

  Alt 7. Jun 2004, 11:44
Achso,

ich dachte dafür bräuchte man nen anderen Thread, aber man lernt nie aus
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#20

Re: Statusabfragen ständig ausführen?

  Alt 7. Jun 2004, 11:56
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

Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 08:39 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