uhr in c++?

... komplette Frage anzeigen

2 Antworten

while(true)
{
   sleep(1000);
   sek++;
   if(sek >= 60)
   {
      sek = 0;
      min++;
   }
   if(min >= 60)
   {
      std++;
   }
}

Die Modulooperationen lass ich in dem Fall weg, weil es so in dem Fall einfacher ist.

Das std%60 ist übrigens Falsch wenn du Tage zählen willst müsste da ohnehin %24.

Btw du kannst das ganze auch nur mit einem Counter für die Sekunden lösen:

while(true)
{
   sleep(1000);
   cnt++;
   sek = cnt % 60;
   min = (int)(cnt/60)%60
   std = (int)(cnt/3600);
}

Das entspricht dann auch in etwa der Umrechnung vom Unix Timestamp auf das Datum, weil dieser den Offset zum beginn der Unix Epoche in Hunderstell Sekunden angibt.

Noch als kleine Anmerkung diese Uhr hat einen ziemlich hohen drift weil die Sleep Funktion nicht für genaues Timing gedacht ist, das bedeutet da kann es auch sein, dass die anstatt 1000ms 1001ms wartet etc.

Genauer währe die Verwendung eines Timers, noch genauer, die Verwendung einer Hardware Uhr mit eigenem unabhängigen Zähler.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Panteon00
18.10.2016, 22:30

naja davon abgesehen müsste das programm weniger als 1000 ms warten, da der code auch ausgeführt werden müsste

0
Kommentar von PeterKremsner
18.10.2016, 23:25

Mir fällt im oberen Code gerade ein kleiner Bug auf, in der Abfrage if(min >= 60) muss min wieder auf 0 gesetzt werden.

0

sek++
if (sek==60)
{
min++;
sek=0;
}
usw. halt für stunden auch noch

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?