AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

div,mod oder doch besser / ?

Ein Thema von torud · begonnen am 9. Nov 2012 · letzter Beitrag vom 9. Nov 2012
Antwort Antwort
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

div,mod oder doch besser / ?

  Alt 9. Nov 2012, 07:44
Hallo Leute,

ich steh gerade total auf dem Schlauch - wird wohl nicht mein Tag sein.

Ich haben einen Timer am Laufen und möchte eigentlich aller 300 Sekunden ein paar Daten speichern.
Nun könnte ich mit case checken, ob die Sekundenanzahl 300, 600 oder 900 (usw.) ist, aber das scheint mir doch etwas zu viel Code.

Ehrlich gesagt, komm ich nicht drauf wie ich das lösen kann. Mir ist schon klar, dass die Anzahl der Sekunden dividiert durch 300 eine ganze ergeben müssen. Wie kann ich aber prüfen, ob das Ergebnis wirklich eine ganze Zahl ist?

Vielleicht wenn Sekunden Mod 300 = 0 ist?
Ich glaube, ich habe mir gerade selbst die Antwort gegeben...

Das wird ganz sicher nicht mein Tag...
Danke
Tom
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#2

AW: div,mod oder doch besser / ?

  Alt 9. Nov 2012, 07:47
Warum stellst du den Intervall des Timers nicht einfach auf 300000?
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#3

AW: div,mod oder doch besser / ?

  Alt 9. Nov 2012, 07:48
Ich würde genauso vorgehen. Wenn du das Intervall vom Timer auf 300 Sekunden stellst (also 300 * 1000), dann wird der (fast) immer aufgerufen und du musst dich nur im OnTimer-Event um dein Speichern der Daten kümmern.
Falls das dein Problem nicht löst, weil du etwas anders löst, musst du wohl etwas Code zeigen...
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: div,mod oder doch besser / ?

  Alt 9. Nov 2012, 07:56
[...]Ich glaube, ich habe mir gerade selbst die Antwort gegeben...[...]
Jap, das hast du! Mit mod kannst du diese Prüfung gut machen
Ansgar
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: div,mod oder doch besser / ?

  Alt 9. Nov 2012, 08:33
Timerintervall müsste dazu aber genau 1 Sek. sein, sonst speichert man evtl. mehrfach in einer Sekunde. Dann gibt's aber das Problem, dass eventuell genau der Tick bei 300 Sekunden durch das eigene Programm oder irgend einen anderen Prozess leicht verspätet kommt, und schwupps ist der genaue "X mod 300 = 0" Punkt vorbei.
Die einzig saubere Variante ist ein Timer mit passendem Intervall von 300000ms, und immer speichern wenn der kommt. (Alternativ noch ein Thread mit 300000ms Sleep drin, aber das ist ggf. deutlich komplizierter nachher.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: div,mod oder doch besser / ?

  Alt 9. Nov 2012, 08:42
Ich würde das Timerintervall sehr niedrig ansetzen, eine Variable FLastSaved mit GetTickCount o.ä. vergleichen, wenn nötig speichern und die Variable neu setzen.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.135 Beiträge
 
Delphi 12 Athens
 
#7

AW: div,mod oder doch besser / ?

  Alt 9. Nov 2012, 10:04
Wenn du es mit Timer sonst nicht so übertreibst, warum nicht einfach einen 300000er-Timer?



Also das du mit "div" nicht weit kommst, kannst'e dir wohl denken, oder?
Du könntest/mütest dir den letzen Wert merken und warten bis sich das Ergebnis ändert.

Und mit "/" erst recht (bei all den Threads bezüglich dem "Vergleichen" bei Fließkommazahlen )

Wenn du gegen einen internen Zähler prüfst, welcher nur an einer Stelle, in diesem Timerereignis, geändert wird, dann kann man mit =0 arbeiten, wen man z.B. gegen die Unrzeit prüft, dann sieht das ganz anders aus, da ma dort nicht unbedingt genau diesen Moment treffen muß.

Sowas kann man z.b. in einem Timer mit einem Intervall von 1 Sekunde bis 1 Minute (wenn "div y" wehr als eine Minute) ... je nach genauigkeit
Delphi-Quellcode:
X := Trunc(TimeOf(Now) * MinsPerDay) div 5;
if X <> LastX then begin
  LastX := X;
  // mach was, zu jeder vollen 5. Minute (5, 10, 15, ...)
end;


// oder wenn man mehreres in Minutenintervallen prüfen will
X := Trunc(TimeOf(Now) * MinsPerDay);
if X div 5 <> LastX1 then begin
  LastX1 := X div 5;
  // mach was, zu jeder vollen 5. Minute (0, 5, 10, 15, ...)
end;
if X div 10 <> LastX2 then begin
  LastX2 := X div 10;
  // mach was, zu jeder vollen 10. Minute (0, 10, 20, 30, ...)
end;
Es hat sogar den Vorteil, daß es nicht vom Startzeitpunkt des timer abhängt. (5 Minuten können da ja auch 3, 8, 13, 18 usw. sein)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz