QueryPerformancefrequency spinnt...
-
Moin,
ich hab hier ein echtes Problem: QueryPerformanceFrequency sagt mir das ich keinen PerformanceCounter hab, was völliger quatsch ist, da der selbe Code vor ein paar Tagen noch reibungslos funktioniert hat. 2 Aufrufe von GetLastError() vor und nach QPF bringen den Fehler Nr. 998 (nach QPF, vorher nix) "Unzulässiger Zugriff auf einen Speicherbereich." Also ich weiss echt nicht was GetLastError sagt wenn kein PerformanceCounter installiert ist (was allerdings nicht der Fall ist, und in der MSDN sucht man sich tot wenn man wissen will was GLE da liefert), aber ich denke doch wohl nicht: "Unzulässiger Zugriff auf einen Speicherbereich."QPF wird im Konstruktor einer Klasse aufgerufen, die vorher noch mit PCounter funktioniert hat. Von der Klasse wird eine globale Instanz erstellt, die dann im Programm (sinnigerweise) dazu dient Zeiten zu messen...
CTimer::CTimer() { // Debug DWORD dr=GetLastError(); // Debug if(QueryPerformanceFrequency(reinterpret_cast<LARGE_INTEGER*>(&m_liFrequency))) { m_bUsePerformanceCounter = true; } else m_bUsePerformanceCounter = false; //Debug dr=GetLastError(); //Debug m_bRunning = false; m_iResolution = SR_MILLISECONDS; }Ich hab mal in google gesucht, und auf gamedev.net scheint jmd dasselbe Problem gehabt zu haben, laut seiner Aussage schlägt QPF allerdings nur im Konstruktor fehl, mit selber Fehlermeldung (998), überall sonst im Programm funktionierts. Das hab ich bei mir noch nicht getestet, werd ich aber gleich mal tun...
Ein Compiler-Bug vielleicht? Benutze VC 6.0
Hab schon alles versucht:
das Projekt bereinigt und alles neu erstellt -> Fehlanzeige
die Konfigurationen hin- und hergewechselt -> FehlanzeigeHoffe es hat jmd ne Idee...
Ich glaub nicht das es an meinem Code liegt, denn als der Fehler zum erstenmal auftrat hab an ganz anderer Stelle gearbeitet. Ausser ich bin Blind, dann könnte mir mal jmd die Augen öffnen
mfg FinalNotriX
-
Passiert das auch mit einer normalen (nicht globalen) Instanz?
-
Yep. Auch da Error 998...komisch
Vielleicht sollt ich mal rebooten, aber irgendwie glaub ich nicht das es was bringt. Jmd ne Ahnung was GLE für ne Fehlermeldung bringt wenn kein PC installiert is?
-
also:
GLE = GerLastError
PC = PerformanceCounterfalls das unklar gewesen sein sollte.
-
Und welchem Typ ist m_liFrequency?
-
m_liFrequency ist ein __int64.
Ich hab das Problem gefunden...es lag an einem #pragma pack(1) das eigentlich nur für eine andere Struktur gedacht war. Ich hatte einfach vergessen wieder auf pack(8) zu setzen. Aber in wie fern beeinflusst das den LARGE_INTEGER? Das ist ja auch ne Struktur. Wenn man nicht gerade über Bitmasken drauf zugreift sollte das Pack doch eigentlich egal sein, oder irre ich mich da?
mfg FN