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*