Roland Goretzki schrieb:
Inzwischen habe ich in einem Versuchsprogramm eine Uhr auf Sekundenbasis eingebaut, die auch bisher einwandfrei funktioniert.
Einziger "Nachteil": Sie darf nicht länger als 24 Stunden laufen, sonst zeigt sie die gemessene Zeit minus dem Überschuß an Tagen an, was aber für meine Zwecke, wo es um Übungen geht, die höchstens einige Minuten dauern, egal ist.
Sie basiert auf GetTimeStamp.
Diese Uhr zu bauen, war für mich eine Riesenanstrengung (das soll keine Klage sein, sondern nur ein Hinweis darauf, daß das Programmieren mir doch noch sehr, sehr schwer fällt, auch wenn es Freude macht :-), obwohl ich sie eigentlich vor Jahren schon einmal für ein anderes Programm gebastelt hatte, für welches sie auch tauglich war.
Dass es so eine Anstrengung war, liegt auch daran, dass TimeStamp und ähnliche Datentypen für solche Zwecke unpraktisch sind, weil Datum und Zeit zerlegt sind und du sie wieder zusammensetzen musst. (Du machst also einen Teil von dem, was GetTimeStamp gerade gemacht hat, wieder rückgängig.)
Im allgemeinen ist es sinnvoll, "zerlegte" Zeitformate für Ein- und Ausgabe zu verwenden und lineare, um mit Zeit zu rechnen (es sei denn, man rechnet mit Monaten oder Jahren -- dann ist wiederum die zerlegte Form einfacher, weil Monate und Jahre nicht gleich lang sind).
Zum Umwandlung gibt es natürlich auch Funktionen (wobei UnixTimeType in Sekunden, nicht µs, misst), sodass man für jeden Zweck das einfachere Format verwenden kann und sich normalerweise nicht sebst um die Umwandlung kümmern muss.
procedure UnixTimeToTimeStamp (UnixTime: UnixTimeType; var aTimeStamp: TimeStamp); function TimeStampToUnixTime (protected var aTimeStamp: TimeStamp): UnixTimeType;
Wenn du die Zeit sowohl ausgeben als auch damit rechnen willst, ist es besser, sie einmal auszulesen, z.B. mit GetMicroSecondTime, und dann umzuwandeln, statt sie nochmal mit GetTimeStamp auszulesen, weil zwischen den beiden Aufrufen ja ein paar Sekundenbruchteile vergehen, was u.U. zu inkonsistenten Ergebnissen führt.
Nun ist sie entsprechend meinen Fähigkeiten sauberer programmiert. Zur evtl. Begutachtung hänge ich sie an diese E-Mail an.
Zeit_Komponenten_Ausgabe und Gestoppte_Zeit_Ausgeben kannst du evtl. mit Hilfe von "FormatTime (SystemDatum, Format)" vereinfachen. Format ist dabei in der gleichen Form wie bei Date (ohne das "+", also z.B. "%m" für den Monat), Näheres steht in gpc.pas bei "FormatTime". V.a. das Einfügen der führenden Nullen geht damit einfacher (und das Format ist später jederzeit leicht änderbar -- nur ein String statt Programmcode).
Frank