Verzögerung



  • Hi,

    ich möchte einen Datenfluss verzögern. Also wenn zB ein double einen Wert
    annimmt, soll dieser Wert nach einer Sekunde erst weitergegeben werden.
    Mit Sleep() ist das ja nicht möglich, weil einfach der Code an der Stelle stoppt.
    Gibt es da irgendeine vorgefertigte Funktion? Oder hat jemand eine Idee dafür?

    grüße
    Huddi



  • Das könnte auf Threads hinauslaufen, aber beschreibe bitte mal ganz genau, was du eigentlich willst (vielleicht auch mit Code). Das ist mir noch nicht ganz klar.



  • das ganze ist in einer Routine, die immer wieder durchlaufen wird.
    Im Grunde kann mans darauf runterbrechen:

    i++;
    mMeineZahl=x
    

    und x ist dabei i vor einer sekunde


  • Mod

    Bau Dir doch eine Queue.
    Schieb die Daten rein, die Du bekommst. Nimm die Daten raus wann Du sie brauchst... 😉 Das dürfte reltiv simpel gehen, wenn Du jedem Wert eine Zeit zuweist.



  • Also ich bin immer noch nicht ganz sicher, was du da bezweckst. Aber wenn du in deiner Schleife immer x auf den aktuellen Wert von i setzen willst, nachdem eine Sekunde vergangen ist (warum auch immer), dann kannst du doch einfach die Zeit mitzählen (z.B. GetTickCount) und alle vergangenen 1000ms x=i setzen.



  • _matze schrieb:

    Also ich bin immer noch nicht ganz sicher, was du da bezweckst. Aber wenn du in deiner Schleife immer x auf den aktuellen Wert von i setzen willst, nachdem eine Sekunde vergangen ist (warum auch immer), dann kannst du doch einfach die Zeit mitzählen (z.B. GetTickCount) und alle vergangenen 1000ms x=i setzen.

    Also das ganze soll den Kontakt zu einem steuerbaren Satelliten simulieren.
    Da ist die Signallaufzeit hin und zurück ca. 1 sek
    Wenn x immer den Wert von i vor einer Sekunde haben soll muss ich doch irgendwie
    alle Werte, die i während einer Sekunde annimmt zwischenspeichern, das sehe
    ich doch richtig?!
    Das ganze wird ca 60 mal pro Sekunde durchlaufen, aber eben nicht genau. Daher
    kann ich mir nicht einfach nen Array machen, in dem ich die Werte speichere
    und der Reihe nach wieder abrufe.



  • Na dann: siehe Martins Vorschlag.



  • ich steh grad irgendwie aufm schlauch.

    meint ihr so ungefähr?:

    typedef struct{
    	double Zahl;
    	DWORD Zeit
    }VERZOEGERN;
    
    queue< VERZOEGERN > mQueue;
    
    (...)
    
    VERZOEGERN element;
    element.Zahl=i;
    element.Zeit=GetTickCount();
    
    mQueue.pushBack(element);
    if (GetTickCount()-mQueue.first().Zeit > 1000)
    {
    	x=mQueue.first().Zahl;
    	mQueue.pop();
    }
    
    (...)
    

Log in to reply