![]() |
Re: Statusabfragen ständig ausführen?
Ich hatte neulich ein aehnliches Problem, das ich mit
Delphi-Quellcode:
geloest hatte. Das Ganze lief in einem Thread (daher die Abfrage auf Terminated) und sollte auf einen Button warten.
repeat
Application.ProcessMessages; until Terminated or ButtonGeklickt; 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:
Alternativ gibt es auch das OnTerminate-Ereignis, das du dafuer einspannen koenntest.
if Thread.Terminated then
begin if Assigned(Thread.FatalException) then Protokoll('Thread ist gestorben'); end; |
Re: Statusabfragen ständig ausführen?
Zitat:
|
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.
|
Re: Statusabfragen ständig ausführen?
Zitat:
Das Programm muss mehr oder weniger in Echtzeit (spätestens alle paar Sekunden) Daten empfangen und auswerten. |
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.
|
Re: Statusabfragen ständig ausführen?
Zitat:
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 :-) |
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 |
Re: Statusabfragen ständig ausführen?
Zitat:
|
Re: Statusabfragen ständig ausführen?
Achso,
ich dachte dafür bräuchte man nen anderen Thread, aber man lernt nie aus :-D :-D |
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:
..durch das Sleep kreigen andere Prozesse Rechnerzeit und man verhindert einen Deadlock,
repeat
. . . Sleep(100); until Terminated; falls andere Threads wichtige Aufgaben noch zu erledigen haben ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:18 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