C++ TIming



  • Hallo, ich will eine Funktion machen, die mein Programm für einen kurzen Augneblick unterbricht, so wie die Sleep() funktion von Windows, aber ich habe gelesen, dass diese Funkion ein Programm minimalst für 10-15 millisekunden unterbrechen kann, aber was macht man wenn man geringe Zeiten braucht, z.B. eine halbe millisekunde oder so? Ich dachte an eine Schleife, wo man mit dem QueryPerformanceCounter() die Zeit misst und in einer Schleife immer wieder die Differenz ausrechnet um dann was zum machen... aber diese Methode bruacht 100% Prozessorauslastung oder verwende ich ihn nur falsch ?

    #include <windows.h>
    #include <iostream>
    #include <mmsystem.h>
    
    //link libwinmm.a
    
    LONGLONG Frequency,CurrentTime, LastTime;
    
    double TimeElapsed, TimeScale;
    
    using namespace std;
    
    int main(void)
    {
        QueryPerformanceFrequency( (LARGE_INTEGER*) &Frequency);
        TimeScale = 1.0/Frequency;      
        QueryPerformanceCounter( (LARGE_INTEGER*) &LastTime);
    
        while(true)
        {  
           QueryPerformanceCounter((LARGE_INTEGER*) &CurrentTime); 
           TimeElapsed = (CurrentTime - LastTime) * TimeScale; 
    
               if(TimeElapsed >= 0.01)
               { 
                   cout << TimeElapsed << endl;            
                   LastTime = CurrentTime;
               }
        }
    
        system("PAUSE");
        return 0;
    }
    

    Gruß Chris



  • Windows ist kein Echtzeit OS, anders wirst du sowas kaum machen können. Und selbst dann sollte dir klar sein, dass das Thread Scheduling dazwischen funken kann und wieder ein paar Millisekunden daraus machen kann.


Anmelden zum Antworten