Entwickler-Ecke

Algorithmen, Optimierung und Assembler - zeitgesteuerte Überwachung von Variablen in einem Thread


LokutusvB - Mi 06.09.06 10:31
Titel: zeitgesteuerte Überwachung von Variablen in einem Thread
Hallo Leute,

ich arbeitet an einem Programm, welches einen Thread starten und auch wieder stoppen kann, soweit nix dramatisches . In diesem Thread erfolgt ein Funktionsaufruf mit Rückgabewert 1 oder 0 und eine Auswertung.

Nun soll das ganze zeitgesteuert ablaufen. Wenn die Rückgabe der Funktionen im Thread z.B. 10 Sekunden lang 1 beträgt, soll der Thread automatisch neu gestartet werden. Nur bin ich mir noch ein wenig im unklaren, wie ich das ganze realisieren soll.

Der eigentliche Thread muß ständig weiterlaufen, das heisst die Funktion mit Rückgabewert muß auch ständig ausgeführt werden. Und seperat muß üperprüft werden, ob der Rückagbewert 10 Sekunden lang jeweils 1 gewesen ist, dann soll der Thread neu gestartet werden, andersfalls einfach weiterlaufen. ist der Rückgabewert dann wieder mal 1, soll eine erneute Zeitprüfung beginnen.

Ich könnte bei 1 eine Methode über Synchronize aufrufen, welche die Startzeit speichert und bei den nächsten Aufrufen immer vergleicht, wenn zeitspanne zu hoch, dann Neustart des Threads.

Gibt es hierfür eventuell eine elegantere Lösung?

MFG
LokutusvB


BenBE - Mi 06.09.06 13:46

Speicher in deinem Thread ein einfaches Property (über CriticalSections synchronisiert), was vom Thread verwaltet wird. und in dem Du angibst, ob der Thread 10 Sekunden lang in dieser einen Funktion 1 geliefert hat. Dabei merkt sich NUR der Thread die Startzeit des ersten mal 1 und gibt nur ggf. ein Flag an die Hauptanwendung (über besagtes Property) wenn deine Restart-Bedingung erfüllt ist ...

Synchronize solltest Du insofern vermeiden, weil es dir dabeidie halbe Anwendung kurzfristig sperrt und als solches aufwändiger als eine CriticalSection ist, die vom OS geregelt wird.


LokutusvB - Mi 06.09.06 14:20

Danke für den Tip, werde mich da gleich mal einlesen und das ganze in die Praxis umsetzen.

MFG
LokutusvB


Horst_H - Mi 06.09.06 14:23

Hallo,

gibt es nicht noch soetwas schoenes wie InterlockedExchange(),InterlockedExchangeAdd(), ohne criticalsections.
Siehe Luckies Thread Tutorial [http://www.delphi-library.de/viewtopic.php?t=16627] ?

Gruss Horst