WIN API Funktion GetCursorPos zu langsam o_O ?
-
Hallo ich wolle ein Programm machen um die Bildschirm Koordinaten zu ermitteln.
Unter Windows XP ging es immer ohne Probleme, doch jetzt hängt das Programm immer für ca. 1 Sekunde bevor es wieder neue Koordinaten abfragen kann.Weiss jemand woran das liegen kann? [ Mein PC ist wohl nicht zu langsam ich hab eine i7 860 CPU ]
#include <windows> #include <iostream> using namespace std; int main(int argc, char *argv[] ) { POINT point; while(1) { Sleep(1); system("CLS"); GetCursorPos ( &point); cout<<"X: "<<point.x<<endl; cout<<"Y: " <<point.y<<endl; } }
-
Ähm,
Sleep(1);?
-
Hatte ich bin XP auch immer so da ansonsten die CPU Auslastung bis auf 100% hochgeht wenn man eine ältere CPU verwendet ( z.b. Pentium 4 ).
Sleep(1); und 1 = 1 Millisekunde ...
Und ohne Sleep habe ich das gleiche Fehlerverhalten.

-
Bist du dir denn sicher, daß das Problem wirklich an GetCursorPos() liegt? Der system()-Aufruf könnte ebenfalls Probleme verursachen. Ansonsten achte mal darauf, wieviel Prozessor-Zeit dein Programm tatsächlich verwendet - und gib mal zusätzlich den Wert von
clock()oder GetTickCount() aus, um zu sehen, wie oft diese Schleife wirklich durchlaufen wird.
-
Du könntest auch folgendermaßen herausfinden, ob's wirklich an GetCursorPos liegt:
int main() { POINT point, lastframe; for(;;) { GetCursorPos (&point); if(lastframe.x != point.x || lastframe.y!=point.y) { lastframe = point; system("CLS"); cout<<"X: "<<point.x<<endl; cout<<"Y: " <<point.y<<endl; } Sleep(50); // reichen nicht 20 Aktualisierungen/sec ? } }
-
die Verzögerung kommt durch die riesige Masse an Text, die durch die Konsole ausgegeben wird. Normaler Weise erfolgt dies asynchron - hier wird die Ausführung allerdings unterbrochen damit Windows den Text erst einmal Ausgeben kann, da der Ausgabepuffer voll ist. Unter WinXp wurde die Ausgabe wohl nicht asynchron bewerkstelligt.