AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Programm Wurzelberechnung nach Heron
Thema durchsuchen
Ansicht
Themen-Optionen

Programm Wurzelberechnung nach Heron

Ein Thema von EdAdvokat · begonnen am 14. Jan 2017 · letzter Beitrag vom 19. Jan 2017
 
nahpets
(Gast)

n/a Beiträge
 
#23

AW: Programm Wurzelberechnung nach Heron

  Alt 18. Jan 2017, 18:58
Also, damit ein Timer arbeitet, muss irgendwo Enabled auf True gesetzt worden sein. Das kann im Objektinspektor sein oder im Quelltext.

Im Timerereignis nun zu beginn den Timer ausschalten, also Enabled auf false.

Jetzt wird ja allerlei im Ereignis gemacht. Zeit ermitteln, in römische Zahlen umwandeln, zur Anzeige bringen ...

Dabei vergeht ja etwas Zeit. Bis zur nächsten vollen Sekunde (für die nächste Anzeige ...) besteht nun noch eine Zeitdifferenz von x Millisekunden (> 0 und < 999).
Das Timerintervall ist im Objektinspektor (vermutlich) auf 1000 gesetzt. Die verbleibende Zeit bis zur nächsten vollen Sekunde ist aber nicht immer 1000 Ms. Daher muss hier die Zeitspanne zwischen Jetzt und der nächsten vollen Sekunden berechnet werden. Dieser Wert muss dann dem Timerintervall zugewiesen werden und anschließend Enabled wieder auf True gesetzt werden.

Warum reite ich auf dem ganzen (hier im konkreten Fall) Quatsch rum?

Stell' Dir vor, Du musst in regelmäßigen Abständen eine bestimmte Aufgabe erledigen. Z. B. genau zu jeder vollen Minute. Aber es kommt erschwerend hinzu: Unter bestimmten, ungünstigen, Bedingungen dauert die Erledigung der Aufgabe länger als eine Minute. Ein permanent laufender Timer, der stoisch alle 60000 MS "zuschlägt", würde also die Timerroutine bereits aufrufen, während die vorherige noch abgearbeitet wir. Das sollte verhindert werden.

Da nicht bekannt ist, wie lange nun die Abarbeitung der Aufgabe in jedem Einzellfall dauert, kann man hier also nicht mit einem statischen Timerintervall arbeiten.
Am Ende der Aufgabe muss also die Anzahl der Millisekunden bis zur nächsten vollen Minute berechnet werden, das Timerinterval entsprechend gesetzt werden und dann der Timer aktiviert werden.

Oder mal einfach so als Spasserweiterung für Deine Uhr.

Der Timer setzt jede Sekunde "Alles". Das Datum ändert sich aber nur einmal täglich.

Dafür könnte man auch einen Timer nehmen. Beim Programmstart wird die Timerroutine einmal aufgerufen und dort wird dann die verbleibende Zeit in Millisekunden bis 0 Uhr berechnet, das Timerintervall gesetzt und der Timer eingeschaltet.
Damit wird das Datum nur noch einmal täglich um 0 Uhr gesetzt.
Nimm einfach mal an, dass Du da nicht einfach nur Text auf ein Label schreibst, sondern über eine Schnittstelle eine große mechanische Anzeigetafel ansteuern musst, dann ist es schon eine Überlegung wert, ob man das wirklich jede Sekunde macht oder nur wenn sich das Datum ändert.

Als Spielerei könnte man jetzt ja auch noch einen Timer nehmen, der nur für die Anzeige der vollen Stunde zuständig ist.

Und einen, der nur für die Anzeige der vollen Minuten zuständig ist.

Und als letztes den für die Sekunden.

Klar ist das für 'ne einfach Uhr völlig überdimensioniert, aber mal mit Zeiten rechnen und Zeitdifferenzen ermitteln, um damit ein bestimmtes, in der Zukunft liegendes, zu einem konkreten Zeitpunkt auszulösendes, Ereignis in Gang zubringen, ist schon 'ne Lernaufgabe
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 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