Benutzer mit den meisten Antworten
Viele Timer / Zeitberechnungen (Alternativen, etc?)

Frage
-
Liebe Community,
ich programmiere derzeit einen Simulator bei dem viel mit Zeitberechnungen im Hintergrund berechnet werden muss etc.
Nach bestimmten Zeiten passieren unterschiedliche und vorallem parallele Dinge die abgefragt werden müssen.
Wie kann ich in WPF am besten Zeitberechnungen durchführen? Eignen sich dazu die DispatcherTimer? Oder gibts eine bessere Lösung? Nach circa 30 Minuten Spielzeit mit der Simulation laufen im Hintergrund circa 20 Timer - parallel!
Ich hoffe, Sie können und ihr könnt mir helfen.
Herzlichen Dank.
Mit freundlichen Grüße, Nevco
Antworten
-
Hallo
Mit dem zentralen Timer wäre das dann wie folgt:
1. Der Startzeitpunkt wird dem Timer (z.B Uhrzeit und Datum) entnommen und gespeichert
2. Der Zielzeitpunkt / die Zeitdauer wir dem Startzeitpunkt des zentralen Timers addiert und die Aufgabe / Aktion gestartet
3. wenn der zentrale Timer den entsprrechenden Zeitpunkt erreicht hat wird die Aufgabe / aktion gestoppt
Ich hoffe das konnte ein wenig weiterhelfen
Gruß Jabbschy
-
Hallo zusammen,
von dem was ich bisher gelesen habe plädiere auch ich für einen einzigen, zentralen Timer.
Ich möchte zusätzlich noch das Konzept der Spielschleife aufbringen. Das ist hier vielleicht auch anwendbar. Dabei wird eine Schleife ohne Unterbrechung ausgeführt und in jeder Iteration werden die benötigten Aktionen durchgeführt. Sollten beispielsweise 2 Autos gegen einander ein Rennen fahren, wobei Auto A doppelt so schnell ist wie Auto B, dann kann man innerhalb der Schleife Auto A in jeder Iteration 1px nach vorn bewegen, Auto B dagegen nur in jeder 2. Iteration.
Da hier auch noch die Aktualisierung der UI eine wichtige Rolle spielt, sei noch gesagt dass diese so gering wie möglich ausfallen sollte. Jeder zusätzliche Aufruf des Dispatchers benötigt sehr viel Leistung. Daher würde ich auch vom DispatcherTimer abraten, denn dieser führt den gesamten Code im Tick-Eventhandler im UI-Thread aus.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Nevco Dienstag, 23. Februar 2016 18:07
Alle Antworten
-
Das ist schwer zu erklären.
Es gibt Fahrzeuge (viele). Diese Fahrzeuge führen bestimmte Aufgaben aus. Die Aufgaben sind zeitgesteuert und Fahrzeugabhängig. Je nach Aktion etc. werden entsprechende zeitgesteuerte und fahrzeugabhängige Aufgaben bestimmten Fahrzeugen zugewiesen. Nach einer bestimmten Zeit wird eine bestimmte Aktion - welche jedes mal unterschiedlich sein kann - ausgeführt.
Hilfreich?
Mit freundlichen Grüße, Nevco
-
Hallo Nevco,
wie Jabbschy schon schreibt, sollte da ein zentraler Timer genügen.
Die Fahrzeugdaten liegen ja sicher in einer Db oder ähnlichem. Hierin könntest Du z.B. das Aufgabenintervall, und die letzte Ausführung hinterlegen. Im zentralen Timer würdest Du dann zu der letzten Ausführungszeit das Ausführungsintervall addieren, und mit der/dem aktuellen Zeit/Datum vergleichen. Das ganze kommt natürlich stark auf die Menge der Fahrzeuge und die Intervallgröße an, die verarbeitet werden müssen, die wir hier aber noch nicht kennen.
Grüße
Roland
-
Hallo
Mit dem zentralen Timer wäre das dann wie folgt:
1. Der Startzeitpunkt wird dem Timer (z.B Uhrzeit und Datum) entnommen und gespeichert
2. Der Zielzeitpunkt / die Zeitdauer wir dem Startzeitpunkt des zentralen Timers addiert und die Aufgabe / Aktion gestartet
3. wenn der zentrale Timer den entsprrechenden Zeitpunkt erreicht hat wird die Aufgabe / aktion gestoppt
Ich hoffe das konnte ein wenig weiterhelfen
Gruß Jabbschy
-
Hallo zusammen,
von dem was ich bisher gelesen habe plädiere auch ich für einen einzigen, zentralen Timer.
Ich möchte zusätzlich noch das Konzept der Spielschleife aufbringen. Das ist hier vielleicht auch anwendbar. Dabei wird eine Schleife ohne Unterbrechung ausgeführt und in jeder Iteration werden die benötigten Aktionen durchgeführt. Sollten beispielsweise 2 Autos gegen einander ein Rennen fahren, wobei Auto A doppelt so schnell ist wie Auto B, dann kann man innerhalb der Schleife Auto A in jeder Iteration 1px nach vorn bewegen, Auto B dagegen nur in jeder 2. Iteration.
Da hier auch noch die Aktualisierung der UI eine wichtige Rolle spielt, sei noch gesagt dass diese so gering wie möglich ausfallen sollte. Jeder zusätzliche Aufruf des Dispatchers benötigt sehr viel Leistung. Daher würde ich auch vom DispatcherTimer abraten, denn dieser führt den gesamten Code im Tick-Eventhandler im UI-Thread aus.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Nevco Dienstag, 23. Februar 2016 18:07