System.Diagnostics.StopWatch ungenau hinsichtlich der Sekunden? c#

knappenboy

Mitglied
Hallo,

ich verwende die StopWatch und lasse diese von 0 Sekunden, im 0.1 Sekunden Intervall, bis 3 Sekunden laufen. Füge jeden Intervallschritt in eine Liste. Danach setze ich diese zurück. Bis jetzt stellte ich fest das ich nicht einmal es geschafft habe 30 Elemente zu bekommen. Meist zwischen 27 und 29. Ist es möglich exakt 30 Elemente zu bekommen, somit die Uhr exakt läuft?

C#:
if (stopWatch.IsRunning)
                    {
                       
                        TimeSpan ts = stopWatch.Elapsed;
                        int Stoppuhr_Sekunden = ts.Seconds;
                        int Stoppuhr_Millisekunden = ts.Milliseconds / 100; 
                        
                        double DreiSekunden = 3.0 - (double.Parse(Stoppuhr_Sekunden.ToString() +                             Stoppuhr_Millisekunden.ToString()) /10); 

                        double Beispieltimer = Math.Round(Convert.ToDouble(DreiSekunden), 2);
                        Timer.Add(Beispieltimer);

           if (Stoppuhr_Sekunden == 3)
                            {
                                  stopWatch.Reset();
                            }
                     }
 
Zuletzt bearbeitet von einem Moderator:
Hi

also es ist wichtig, genau x Events in y Sekunden zu haben.
Wie wichtig ist es, dass die Intervalle immer gleich groß sind, bzw. wieviel Abweichung ist bei den 100ms erlaubt? Ist zB. einmal 99ms und dafür das nächste Mal 101ms zu schlecht, oder wäre sogar 50/150 ok solange es auf die 30 Mal kommt?

"Exakt" existiert jedenfalls nicht, in keinem menschengebauten Gerät.
 
Mir wäre die Abweichung von 110ms bis 90ms recht. Dann müsste man auf- und abrunden, damit die 30 Elemente entstehen.? Die 30 Elemente müssen vorhanden sein.

Danke für die Antwort.
 
Okay, Danke. Ich werde bei der StopWatch-Klasse bleiben und schraube das Intervall runter.

Da habe ich jetzt das Problem das einige Elemente sich gleichen. Sprich das nachfolgende Element ist gleich dem vorherigen.
Also

3 , 3 , 2.9 , 2.8 , 2.7 , 2.7 , 2.6 , 2.5 , 2.4 , ... , 0.1 , 0.1 , 0

foreach (int jj in Timer)
{
if (Timer[jj] == Timer[jj + 1])
{
Timer.RemoveAt(jj);
}
}

da passiert nichts -.-
 
Zurück