Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   timeGetTime Division durch 0 (https://www.delphipraxis.net/167391-timegettime-division-durch-0-a.html)

EWeiss 27. Mär 2012 17:18

timeGetTime Division durch 0
 
Um mein Fenster(bis es grau ist) stepweise einzufaden verwende ich timeGetTime
Mein Problem dabei ist nun das wenn ich die Anwendung debugge das ich ein Division durch 0 erhalte bedingt durch den Haltepunkt.
Wie kann ich diesen fehler abfangen?

WinProcessmessages scheint dafür nicht die ideale lösung.

gruss

BUG 27. Mär 2012 17:29

AW: timeGetTime Division durch 0
 
Bei was genau erhälst du eine Division durch Null?
Wenn du irgendwie durch eine Variable teilst: überprüfe sie doch einfach vorher und setze sie etweder auf einen vernünftigen Wert oder lass dann das Dividieren.

EWeiss 27. Mär 2012 17:42

AW: timeGetTime Division durch 0
 
Zitat:

Zitat von BUG (Beitrag 1158958)
Bei was genau erhälst du eine Division durch Null?
Wenn du irgendwie durch eine Variable teilst: überprüfe sie doch einfach vorher und setze sie etweder auf einen vernünftigen Wert oder lass dann das Dividieren.

Mach ich doch timeGetTime läuft weiter oder ? Wie soll ich das aufhalten.. :)

Delphi-Quellcode:
   for IntI := 0 to 100 do
   begin
    dwStartCount := timeGetTime;

      if m_hNewBitmap <> 0 then
      begin
         DeleteObject(m_hNewBitmap);
         m_hNewBitmap := 0;
      end;

      m_hNewBitmap := FadeBitmap(m_hBitmap, IntI);

      OnDraw(ClientDC);

      dwEndCount := timeGetTime;

      if nStep = 0 then
      begin
         // timer frequency calculation
         if (dwEndCount > dwStartCount) then
            nStep := 1500 div (dwEndCount - dwStartCount)
         else
         nStep := 20;

         // time to frequency
         nStep := 100 div nStep;

         nStep := max(nStep, 3);
         nStep := min(nStep, 49);

      end;
   end;
Hier kracht es meistens
Aber nur wenn ich die Schleife duch einen Haltepunkt unterbreche.


Delphi-Quellcode:
nStep := 100 div nStep;


gruss

himitsu 27. Mär 2012 18:40

AW: timeGetTime Division durch 0
 
Zitat:

Zitat von EWeiss (Beitrag 1158953)
Wie kann ich diesen fehler abfangen?

Dafür sorgen, daß der Divisor nicht 0 ist.
Das ist die einzige korrekte Möglichkeit.

Via IF prüfen, ob 0 und dann was Anderes machen.

Uwe Raabe 27. Mär 2012 19:05

AW: timeGetTime Division durch 0
 
Wenn das Programm am BreaakPoint anhält, kann es vorkommen, daß die Differenz der beiden TimeStamps größer als 1500 ms ist. Dann wird nStep = 0.

Daß kann übrigens auch durch einen längeren Aufenthalt in OnDraw passieren.

EWeiss 27. Mär 2012 19:06

AW: timeGetTime Division durch 0
 
Zitat:

Zitat von himitsu (Beitrag 1158972)
Zitat:

Zitat von EWeiss (Beitrag 1158953)
Wie kann ich diesen fehler abfangen?

Dafür sorgen, daß der Divisor nicht 0 ist.
Das ist die einzige korrekte Möglichkeit.

Via IF prüfen, ob 0 und dann was Anderes machen.

Versteh ich schon da bleibt mir nix anderes übrig.

Delphi-Quellcode:
  if nStep = 0 then
  break;
     
  // time to frequency
  nStep := 100 div nStep;
Zitat:

Daß kann übrigens auch durch einen längeren Aufenthalt in OnDraw passieren.
Will nicht hoffen dass das passiert dann wäre mein Bild nur Halb Grau ;)
In dem Fall müßte ich mir noch was anderes überlegen.
Das zeichnen sollte aber eigentlich in 1.5 Sekunden erledigt sein.

gruss

TiGü 27. Mär 2012 21:55

AW: timeGetTime Division durch 0
 
Mir fehlt ein bisschen der Kontext und weiterer Quellcode, um das Ursprungsproblem zu verstehen, aber warum nimmst du nicht einfach einen TTimer und machst das Schrittweise einfaden über OnTimer?

EWeiss 27. Mär 2012 21:59

AW: timeGetTime Division durch 0
 
Zitat:

Zitat von TiGü (Beitrag 1158996)
Mir fehlt ein bisschen der Kontext und weiterer Quellcode, um das Ursprungsproblem zu verstehen, aber warum nimmst du nicht einfach einen TTimer und machst das Schrittweise einfaden über OnTimer?

Danke im moment geht es ja..
Sollte jedoch das Faden nicht so sein wie ich es mir wünsche (abhängig von der Zeit) wäre das eine alternative.

PS:
TTimer kann ich so nicht verwenden müßte dann ein APITimer sein (bzw. bevorzugt) da ich über keine Form in der DLL verfüge.
Wäre aber kein problem das zu machen .. notfalls

gruss

Medium 27. Mär 2012 22:16

AW: timeGetTime Division durch 0
 
Nen Thread eventuell? Damit mach ich eh immer meine Fading-Forms. Ziemlich handlich!


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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