Zitat von
Luckie:
Wenn es wirklich darauf ankommt zeitgenau etwas auszuführen, dann ist Windows die flasche Platform. Windows ist kein real-time Betriebssystem. Windows basiert auf Nachrichten. Das heißt, nicht man selber bestimmt, ob ein Ereignis eintritt, sondern der Gegenüber und man reagiert dann auf das Ereignis. Wobei hier Ereignis nicht unbedingt im
OOP Sinne zu betrachten ist.
Das heißt, für deine Aufgabe hast du das falsche Betriebssyste. Warum muss denn unbedingt genau jede Sekunde etwas ausgeführt werden? Und was passiert, wenn das nicht der Fall ist? Eine saubere Lösung wäre von der Zeitabhängigkeit weg zu kommen und ereignisorientiert zu arbeiten.
joar ist mir alles klar aber ich möchte auch kein auf ms genaues Programm haben. Und auf eine Sekunde genau sollte möglich sein. Klappt ja auch mit der Gerfrickelten Lösung ganz gut.
Warum jede Sekunde? Nun ich hab zurzeit eine miese Internetverbindung und infolgedessen mal mehr und mal weniger Paket Loss. Mit meinem Programm möchte ich also um das ganze etwas zu überwachen, zu protokollieren und im Nachhinein zu Analysieren halt beständig eine Internetseite anpingen und mir die Antwortzeit merken bzw. ob es ein Timeout = Paketverlust gab.
Der sekündliche ping unter cmd.exe reicht da als Indikator schon aus. Wenn ich in einem Onlinespiel beispielsweise viele Lags (infolge von Paket Loss, wenn der Ping durchkommt ist die Antwort Zeit ok) hab, dann hab ich auch beim ping oft Zeitüberschreitungen.
Und um halt mal festzuhalten zu welchen Tageszeiten ich durchschnittlich wieviel Paketverlust hatte brauche ich halt beständige Daten. Da nützt es mir nix wenn ich einfach so oft pinge wies geht und wenn dann ein Paket verloren geht einfach 2 sek warte bis ich es als timeout zähle und dann weiterpinge. Das gäbe eine reichlich sinnfreie Statistik.
Ob meine Statistik jetzt sinnvoller ist sei mal dahingestellt ^^ Ist für meine Frage auch egal
Zitat von
jfheins:
Zitat von
Antigo:
Werden bei TdateTime denn auch die millisekunden mitgespeichert? Wenn ja dann stimmt das natürlich weil ich ja dann darauf warte, dass seit der letzten Aktion mind 1 Sekunde vergangen ist. Ich will ja aber darauf warten, dass der Sekundenzeiger umspringt, also FormatDateTime('ss',Now) eine andere Zeit ausspuckt, als bei der letzten Aktion und da hilft mir ein GettickCount auch nicht weiter.
WSenn mich nicht alles täuscht ist TDateTime ein Double. Der kommt noch gut in den Millisekundenbereich hinein (von der Genauigkeit) der hier bei etwa 2*10^-7 liegt.
Wenn du wirklich darauf warten möchtest, dass der Sekundenzeiger umspringt, musst du wohl immer die aktuelle Sekunde ausrechnen lassen.
Das muss ich dann wohl :s
danke an alle für die hilfe
edit: Ich werds dann aber wohl folgendermaßen lösen:
Delphi-Quellcode:
if SecondOf(Now)>SecondOf(myPingModul.LastePing) then
begin
sieht nicht mehr ganz so gruselig aus und müsste auch funktionieren