![]() |
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? |
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 |
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. |
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.
|
Re: Statusabfragen ständig ausführen?
Zitat:
|
Re: Statusabfragen ständig ausführen?
Zitat:
|
Re: Statusabfragen ständig ausführen?
Das ein Thread für so Polling Aufgaben etwas geeigneter ist.
|
Re: Statusabfragen ständig ausführen?
Schon, aber dann finge die ganze Sache von vorne an.
|
Re: Statusabfragen ständig ausführen?
Wo ist das problem? dann soll der Thread eben selber anzeigen, dass er noch läuft:
![]() |
Re: Statusabfragen ständig ausführen?
Ja das is ja irgendwie die beste möglichkeit...
muss ich mal einbasteln :gruebel: |
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 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