Autor Beitrag
LokutusvB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 74

WinXP
Delphi 5, Delphi XE
BeitragVerfasst: Mi 06.09.06 10:31 
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
LokutusvB Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 74

WinXP
Delphi 5, Delphi XE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Mi 06.09.06 14:23 
Hallo,

gibt es nicht noch soetwas schoenes wie InterlockedExchange(),InterlockedExchangeAdd(), ohne criticalsections.
Siehe Luckies Thread Tutorial ?

Gruss Horst