2 Stimmen

Wie führe ich eine Funktion mit präzisem Timing aus?

Ich benötige eine Funktion, die zu einem genauen Zeitpunkt innerhalb von +/- 1 ms ausgeführt wird. Ich habe das Folgende versucht, aber am Ende mit einer 15 ms Mindestzeit zwischen der Ausführung.

void Main()
{
    System.Timers.Timer timer = new System.Timers.Timer(1);   // executes every 15ms
    timer.Elapsed += new System.Timers.ElapsedEventHandler(myFunction);

    System.Timers.Timer timer2 = new System.Timers.Timer(5);   // executes every 15ms
    timer2.Elapsed += new System.Timers.ElapsedEventHandler(myFunction);

    System.Timers.Timer timer2 = new System.Timers.Timer(20);   // executes every 31ms
    timer3.Elapsed += new System.Timers.ElapsedEventHandler(myFunction);

    timer.Start();
    timer2.Start();
    timer3.Start();

}

void myFunction()
{
    doWord();
}

Die Verwendung von Thread.Sleep() führt zu den gleichen Ergebnissen.

Zusammenfassung der Bewerbung.

Ich werde eine Datei einlesen, die 1553 Nachrichten (jeweils mit einem Zeitstempel) enthält. Ich muss diese Nachrichten mit dem in der Datei enthaltenen Zeitstempel so genau wie möglich wiedergeben. Die Zeitstempel für die Nachrichten sind in Mikrosekunden aufgezeichnet, aber ich brauche nur eine Genauigkeit von msec.

Dies geschieht mit einer DDC 1553-Karte (PCI-Karte). Ich habe einen Analysator, mit dem ich die Meldungen einschließlich der Deltazeit zwischen den Meldungen anzeigen kann, um meine Genauigkeit zu messen.

Der Rechner, den ich verwende, hat einen QuadCore mit Hyperthreading. Mit einem for(int i=0; .....) kann ich eine Genauigkeit von .5msec erreichen. Dies ist jedoch sehr ineffizient und ich würde es vorziehen, eine realistischere und sogar portablere Methode zu verwenden, wenn möglich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X