Fehlerhafter Code von winapi.net



  • Servus, also ich hba mir den Code für des auslesen der cpu geschwindigkeit von winapi.net angeschaut bei einer funktion streikt mein vc++6 weil sie nichts returnt obwohl das ihre aufgabe ist. Sie arbeitet mit asm befehlen , direkt per __emit. Wahrtscheinlich wird die letzte Anweisung beim letzten __emit returnen, aber des checkt vc anscheiendn nicht. aber wennn der code schon auf der seite steht sollte er doch auch funktinoieren. Wie kann man des PRobelm lösen, wer hat den Code schon benützt?

    #include  <windows.h> 
    #include  <tchar.h> 
    #include  <stdio.h>  
    #ifdef  __BORLANDC__ 
        #define  EMIT    db 
    #else 
        #define  EMIT    __emit 
    #endif  
      UINT64  rdtsc(VOID) 
    { 
         _asm  EMIT  0x0F 
          _asm  EMIT  0x31 
     }  
     UINT_PTR  GetCpuSpeed(VOID) 
    { 
       LARGE_INTEGER  liFreq,  li1,  li2; 
       UINT_PTR       uSpeed; 
       UINT64         timestamp; 
       HANDLE         hThread; 
       int            nPriority;  
          hThread   =  GetCurrentThread(); 
         nPriority  =  GetThreadPriority(hThread);  
          QueryPerformanceFrequency(&liFreq); 
         liFreq.QuadPart  /=  10; 
         SetThreadPriority(hThread,  THREAD_PRIORITY_HIGHEST);  
          timestamp  =  rdtsc(); 
         QueryPerformanceCounter(&li1);  
          do 
          { 
             QueryPerformanceCounter(&li2); 
         }  while((li2.QuadPart  -  li1.QuadPart)  <  liFreq.QuadPart);  
          uSpeed  =  (UINT_PTR)((rdtsc()  -  timestamp)  /  100000); 
         SetThreadPriority(hThread,  nPriority);  
        return(uSpeed); 
    }
    


  • Der Fehler, den Du erhälst, ist nur eine Warnung. RDTSC belegt die Register aber so, wie es auch der Compiler machen würde. Du darfst die Warnung an dieser Stelle ausnahmsweise ignorieren.



  • ups fehlermeinerseits, habs als error gesehen war aber doch nur ne warnung *g*


Anmelden zum Antworten