zyklische Einplanung



  • Halo,

    ich suche einen Befehl der es mir eine zyklische Einplanung erlaubt.
    In anderen Programmiersprachen gibt es den Befehl:

    all 20MilliSeconds do {TASK}
    

    gibt es so etwas auch unter C/C++?

    Gruß
    Flipp



  • schaut nach ner Kombination aus Schleife und sleep aus.



  • varianten gibt es viele. wenn man nicht die variante nehmen will, die pumuckel vorschlug, kann man auch eventbasierte systeme nehmen. wie das geht, kann man dir nur sagen, wenn du das os+lib verrätst.



  • Alle 20 Millisekunden? Vielleicht noch exakt? Falls das deine Anforderung ist, leg dir ein Realtime-System zu - mit einem Standard-Scheduler wirst du niemals diese Antwortzeiten bekommen.



  • Mit standardmitteln ist das millisekunden genau wohl nicht möglich,

    da könntest du auf Threads (boost, pthreads oder winapi) zurück greifen mit einer sleep-funktion deines OS.
    unter windows gibts zudem doch die WM_TIMER nachricht.

    sekunden mit standardmitteln:

    #include <iostream>
    #include <ctime>
    
    int main()
    {
        const double wait_time = 3; // wait 3 seconds
        time_t start_time = std::time(NULL);
    
        for(;;) {
            // do something
            std::cout << "hello, world" << std::endl;
            // and wait at least 3 seconds
            while(std::difftime(std::time(NULL), start_time) < wait_time)
                ; // do nothing
            start_time = std::time(NULL);
        }
    }
    

    wenn das allerdings "gleichzeitig" zu anderen Abläufen deines Programmes passieren soll, wirst du um Threads (die eben nicht im Standard sind) nicht herum kommen.



  • Win XP SP2
    MS Visual C++
    Win 32 Konsolenanwendung

    Was für ne lib??? Da hab ich keine Ahnung von..

    @pumuckl
    das habe ich schon ausprobiert, aber ich weiss nicht wie lang die Ausführung des Code dauert. (ich entwickle auf einem anderen System als auf dem wo das Programm mal laufen soll)
    Dann wäre die Verzögerung zwar immer gleich lang, doch ich weiss nicht wie lang.



  • Die ACE-Library bietet einen Timer, der das portabel supportet. Allerdings hat der unter Windows ebenfalls das Problem, daß man kein Realtime-System benutzt.

    Gruß Kimmi


Anmelden zum Antworten