GetTickCount() gibt irgendwie komische Werte zurück! Funktion zu schnell?



  • Hallo.

    Im Folgenden geht es ausschließlich um die GetTickCount()s.
    Ich will die delta Zeit für diese Funktion ausrechnen.
    Ich habe hier folgende Funktion:

    // WICHTIG ///
    DWORD time = GetTickCount();
    
    while(!bDone)
    	{
    		ReadFile(m_logFile[m_iFileId]->hFile,&wcNext, sizeof(TCHAR), &written, NULL);
    		i++;
    
    		if(wcNext == TEXT('\0'))
    			bDone = true;
    
    		if(szFindString[array_pos] == wcNext)
    			array_pos++;						// match, TCHAR found 
    		else
    			array_pos = 0;					// sorry, no match. 
    
    		if(array_pos == (len - 1))
    		{
    // WICHTIG ///
    			for(int q=0; q<1000000000;q++){
    
    				if(q == 1000000000-1)
    					timeEnd = GetTickCount();	// muss 
    //bremsen, da ich sonst immer 0 für delta bekomme, weil timeEnd und time sonst 
    //immer den gleichen Wert haben.
    			}
    			delta = timeEnd - time;
    // WICHTIG Aus///
    			m_logFile[m_iFileId]->iCurrFilePos = ov.Offset = (i - (len-1))*sizeof(TCHAR);
    			wcNext = TEXT('\0');
    			i=0;
    			bDone = true;
    		}
    
    	}
    

    Also:
    time ist die Zeit vor dem Einlaufen der while Schleife.
    Wenn jetzt in der While-SChleife das hier wahr ist:

    if(array_pos == (len - 1))
    

    Dann bekomme ich eine zweite Zeit, nämlich dann, wenn die while-Schleife ihren Sinn erfüllt hat und einen String gefunden hat, in der Datei.

    Jetzt bekomme ich im delta immer den Wert 0. Daraufhin habe ich das hier eingebaut:

    for(int q=0; q<1000000000;q++){
    
    				if(q == 1000000000-1)
    					timeEnd = GetTickCount();	
    			}
    

    Und siehe da, delta hat plötzlich einen Wert.
    Wie kann das sein, das ich da vorher 0 rausbekommen habe?
    Im debugger waren die Werte von time und timeEnd auch gleich, also vor der Bremse.

    Ich habe einen 1.9Ghz Proz.
    Kann es sein das die Funktion einfach zu schnell ist? 🙄

    Gruß
    Alex



  • herjemine...das ist WinAPI!



  • herjemine...das ist übelstes Gefrickel



  • Also das geht mit

    GetTickCount() * 0.001f
    

    Wenn man das also in sec umrechnet, ist zwar komisch, da msec genauer sind, aber bitte.

    Gruß



  • Na wenn weniger als eine Millisekunde Zeit vergangen ist wird delta auch bei 0 bleiben.
    Welche Typen haben delta und timeEnd?
    Versuch doch mal, mit Sleep() die Schleife zu verzögern - ist delta dann noch immer 0?



  • Dieser Thread wurde von Moderator/in evilissimo 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.



  • GetTickCount hat eine Auflösung von 10-20 ms. Somit wirst Du bei Zeiten, die zwischen 10-20 ms liegen immer ein Delat von 0 bekommen.
    Um kurze Zeiten zu Messen, musst Du QueryPerformanceCounter/Frequency verwenden.


Anmelden zum Antworten