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.


Anmelden zum Antworten