Autor Beitrag
Testobjekt
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Do 07.12.17 15:04 
Hallo Freunde!

Ich mache derzeit ein bestimmtes Programm und dafür benötige ich einen Timer beziehungsweise eine Stoppuhr die nach Zehntelsekunde(100ms) genau nach oben zählt.
Wenn ich jedoch den Timer starte und ihn mit dem Timer auf meinem Smartphone vergleiche, merke ich, dass der Timer etwas zu langsam ist und eben je länger der Timer läuft desto ungenauer wird es.
ausblenden C#-Quelltext
1:
2:
3:
dt.Interval = TimeSpan.FromMilliseconds(100);
dt.Tick += dtTicker;
dt.Start();

Wie kann ich den Timer präzisieren? Find da nix zu :?:

Vielen Dank bereits im Voraus :D

PS: Wird in WPF 3.5 Framework geschrieben

Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Do 07.12.2017 um 14:17
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 381
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Do 07.12.17 15:06 
kannst du durch den Timer irgendwie die Vergangene Zeit nach dem Start oder so ermitteln? Dadurch sollte der Timer genau bleiben. Ansonsten muss es auch möglich sein die Systemzeit abzufragen.
LG

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 381
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Do 07.12.17 15:28 
Schau mal hier: msdn.microsoft.com/d...espan(v=vs.110).aspx
Da sind alle verfügbaren Methoden von dem TimeSpan-Objekt aufgelistet. Ich vermute mal die Total* Methoden geben die vergangene Zeit seit dem Erstellen des Objektes zurück

Ansonsten gibt es noch DateTime.now: stackoverflow.com/qu...ow-as-timespan-value
das kannst du ja mal als Alternative ausprobieren

Edit: In Delphi greife ich inzwischen auch meistens auf QueryPerformanceCounter und QueryPerformanceFrequency zurück - die sind ziemlich genau. Hab nicht dran gedacht, dasss die WinAPI in C# verfügbar sein könnte :roll:

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)


Zuletzt bearbeitet von Symbroson am Do 07.12.17 15:35, insgesamt 1-mal bearbeitet
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 3977
Erhaltene Danke: 813

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Do 07.12.17 15:30 
Hallo,

die Timer-Komponente hat nur eine Auflösung von ca. 15ms, so daß du also bei 100ms eine gewisse Ungenauigkeit drin hast.
Bei exakter(er) Zeitmessung benötigst du einen "high resolution timer", s. z.B. High-Performance Timer in C# oder Microsecond and Millisecond C# Timer.

Für diesen Beitrag haben gedankt: Frühlingsrolle
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2274
Erhaltene Danke: 419

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Do 07.12.17 18:30 
Beide Beiträge sind sehr hilfreich. :zustimm:
Der erste Beitrag beschreibt eine simple Stopuhr, und der Zweite einen erweiterten Timer - mit einem Intervall im Nano-Bereich und einer Stopuhr Funktion.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)