Krys



  • Hallo alle zusammen!

    Bevor ich anfange zu programmieren, wollte ich noch nach einer Möglichkeit fragen. Ich habe ein bestimmtes Zeitinterval (z.B.: von 0 bis 60 sek.) und will einem Bestimmren Zeitpunkt aus diesem Intervall ein Ereignis zuordnen. Es soll beispielweise bei 32,12 sek. etwas passieren! Muss ich mir ein Clock bauen, den ich ständig frage, ob schon die Zeit aufgetretten ist oder gibt es da eine bessere Möglichkeiten.
    Für eure Hinweise bin ich sehr froh.

    Gruß, Krys



  • Du brauchst einen Timer, der Dir nach dieser Zeit (32120 ms) eine Nachricht schickt.

    void XXX::OnStart() 
    { 
        SetTimer( 1, 32120, NULL); // Zeitgeber namens ID 1 starten, Zeitintervall: 0,5 Sekunden 
    }
    
    void XXX::OnTimer(UINT nIDEvent) 
    { 
        // Deine Aktion
        XXX::OnTimer(nIDEvent); 
    }
    

    Du kannst auch den Parameter nIDEvent mit switch/case auswerten, falls Du mehrere Timer brauchst.

    Beispiel:
    http://www.henkessoft.de/mfc_einsteigerbuch_kapitel2.htm (Abschnitt 2.2)



  • Zeitintervall ist 32120 ms = 32,1 s.



  • Achtung!

    Die Zeit ist aber nicht "genau". Für Nutzerinterface usw. reicht das allemal, aber du kannst dich halt nicht drauf verlassen.

    Solange du im Windows im User-Mode bleibts, ist da auch nicht viel zu machen.



  • Hallo!
    Danke für eure Antworten! Die Möglichkeit mit dem Timer war mir bekannt, und funktioniert auch. Ich habe aber mehrere Ereignisse, die in unrägelmässigen Zeitabständen auftreten können. Innerhalb einer Minute können es 3 aber auch 30 Ereignisse (sie sind auch unterschiedlich) aufträten. Ich muss doch nicht mir 30 Timer bauen und jedem ein bestimmtes Ereignis zuordnen? Nicht wahr?
    Gruß, Krys



  • Wie gesagt kannst du mehrere Timer starten und denen eine ID mitgeben. Bei OnTimer erhälst du den Parameter nIDEvent und weißt welche Aktion du ausführen musst... 😉



  • D.h. wenn ich 150 Ereignisse habe, muss ich auch 150 Timer bauen ??? Das muss doch anders gehen.



  • Selten so eine schöne Standardbibliothek gesehen, die so gut zu einem Problem paßt!
    Wo ist das problem ?



  • 1 Nimm zum Begin dieser Zeitsequenz den aktuellen Wert des QueryPerformanceCounter(&start);
    2 Setze für die erste Zeit wie beschreiben einen Timer auf.
    3 Wenn der abgelaufen ist hole mit QueryPerformanceCounter(&now) die aktuelle Zeit
    4 Berechne die deltaZeit zum nächsten Event mit dem Ergebnis des Counters
    5 setze den Timer auf mit dieser deltazeit.
    6 Wiederhole 3..5 solange bis die Timingliste abgearbeitet ist.

    Das klingt im ersten Moment etwas kompliziert, aber daddurch das ich mich immer auf die STartzeit beziehe, ist der Fehler
    jedes einzel erignisses gleichgroß. Würde ich nur mit der deltaueit aus der liste und einem Timer arbeiten würden sich die
    Einzelfehler kumulieren


Anmelden zum Antworten