sleep() oder QueryPerformanceCounter?



  • Hallo,

    ich habe folgenden Code geschrieben:

    for(int i=0;i<1;i++) {
    	QueryPerformanceCounter((LARGE_INTEGER*)&CurentCount); 
    
    	//for(int i=0; i < 10000; i++) 
    	   Sleep(10);
    
    	QueryPerformanceCounter((LARGE_INTEGER*)&LastCount); 
    
    	timeDiff=(((double)(LastCount-CurentCount))/((double)Frequency));
    }
    

    Ausgabe:
    timeDiff=0.015457 s

    wer macht eurer Meinung nach den größeren Fehler? sleep() oder QueryPerformanceCounter?.. das sind ja immerhin 30% abweichung.
    Bei Sleep(1) ist es noch schlimmer..
    Blöd wäre wenn beide eine hohe Abweichung hätten

    lg



  • Erstens: Die ganzen Operationen um das Sleep() herum kosten auch ein wenig Zeit (inklusive der QPC-Aufrufe).

    Zweitens: Windows ist ein Multi-Tasking-System. Und wenn Sleep() fertig ist, kann es durchaus sein, daß gerade ein anderer Prozess beschäftigt ist - und dann mußt du halt etwas länger warten 😉



  • Sleep(1-15) ist auf einem Multi-Prozessor-System immer 15 ms (Single-Prozessor: 10ms).
    Du kannst es mittels "timeBeginPeriod" auf bis zu 2 ms reduzieren.


Anmelden zum Antworten