GetTickCount()



  • Eins vorweg, bin Anfänger 😉
    Also ich habe mal in der Suche nach einer Funktion gesucht, mit der ich festellen kann wie schnell mein Programm ist. Mir ist aufgefallen, dass die Funktion im tiefen Bereich extrem ungenau ist, also dass Sie Anfangs entweder 0 oder 10 Milisekunden angibt. Nachher 20 etc.
    Dafür wenns längers geht, also über eine Sekunde gibt sie plötzlich genau Resultate wie 1261, 3224, .... Woran liegt das bzw. kann ich das nicht irgendwie fixen?



  • GetTickCount? Was ist das denn? 😉

    Probier mal boost::timer. Der ist klasse.



  • Das liegt an deiner Hardware. PCs liefern eben nur alle 10ms ein Timer Signal. Wenn du was genaueres willst (was bei einem nicht Echtzeit Betriebssystem wie Windows eh nicht wirklich möglich ist), dann musst du dir andere Hardware kaufen 🙂

    @Cocaine
    das nutzt unter Windows auch nur GetTickCounts



  • Im Kernel-Modus kannst du bis zu 10ns genaue Daten bekommen.

    QueryPerformanceCounter kann dir vieleicht weiterhelfen

    BTW:
    ist eigentlich WinAPI forum 😉



  • @ScriptGod
    selbst wenn, kannst du unter einem normalen Multiprozess Betriebssystem diese Werte absolut vergessen, da dich im Zweifelsfall gerade der Scheduler 10ms rausnimmt.



  • Dieser Thread wurde von Moderator/in davie aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Nimm timeGetTime und ruf vorher timeBeginPeriod(1) auf (siehe MSDN für Details). Damit habe ich bisher auf allen Rechnern auf Millisekunden genaue Ergebnisse gehabt.



  • class CQTimer
    {
    public:
       CQTimer()
       {
    			m_dwtime=0;
          QueryPerformanceFrequency((LARGE_INTEGER*)&m_freq);
       }
       // starts the timer
       void Start()
       {
          QueryPerformanceCounter((LARGE_INTEGER*)&m_start);
       }
       // returns the number of milliseconds
       DWORD End()
       {
          __int64 li, diff;
          QueryPerformanceCounter((LARGE_INTEGER*)&li);
          diff = li - m_start;
          diff = (diff * 1000)/m_freq;
    			m_dwtime=(DWORD)(diff & 0xffffffff);
          return m_dwtime;
       }
    
    public:
    	DWORD		 m_dwtime;
    
    private:
       __int64 m_freq;
       __int64 m_start;
    };
    

Log in to reply