Programm funktioniert nicht richtig.
-
schlafwissenschaftler schrieb:
Sleep(1) reicht völlig aus.
Sleep(0) ist besser. das gibt einfach nur die angefangene zeitscheibe sofort ab, ohne den thread für einen systemtick schlafen zu legen.
-
fricky schrieb:
schlafwissenschaftler schrieb:
Sleep(1) reicht völlig aus.
Sleep(0) ist besser. das gibt einfach nur die angefangene zeitscheibe sofort ab, ohne den thread für einen systemtick schlafen zu legen.
Noch besser ist, Sleep(-1). Dann werden die Mausklicks vorhergesagt.
-
Zukunftsvisionär schrieb:
Noch besser ist, Sleep(-1). Dann werden die Mausklicks vorhergesagt.
was aber egal ist, weil sämtliche mausklicks bei 'Sleep(-1)' das programm nicht interessieren werden.
-
B.B. schrieb:
Meinst du etwa, das im else Zweig kein Klick stattfinden kann ?
Oh Frau..spielt keine rolle, wo sich die mauss nacher befindet, er will nur die richtung "WÄHREND" des gedrückhalten wissen nich den weg o. positipon
-
schlafwissenschaftler schrieb:
Sleep(1) reicht völlig aus.
Womit wir wieder beim Polling-Problem wären.
-
Nagut, auf die Probleme bezüglich Polling und Sleep ist ja der OP hingewiesen worden. Sich für eine Variante zu entscheiden liegt bei ihm.
Zum Problem selbst:
Verzichte auf float, fabs und co.
Die Bildschirmkoordinaten sind long Werte.
Du brauchst eine zweite Variable vom Typ POINT, um die Koordinatendifferenzen bilden zu können:#include <stdio.h> #include <windows.h> #define PFUI_1 1 #define PFUI_2 100 int main() { POINT now, before; long dx, dy; GetCursorPos( &before ); while ( PFUI_1 ) { Sleep ( PFUI_2 ); while ( GetAsyncKeyState( VK_RBUTTON ) ) { GetCursorPos( &now ); dx = now.x - before.x; dy = now.y - before.y; if ( dy > 0 && dx > 0 ) printf( "3\r" ); if ( dy < 0 && dx > 0 ) printf( "9\r" ); if ( dy > 0 && dx < 0 ) printf( "1\r" ); if ( dy < 0 && dx < 0 ) printf( "7\r" ); if ( dx > 0 && dy == 0 ) printf ( "6\r" ); if ( dx < 0 && dy == 0 ) printf ( "4 \r" ); if ( dy > 0 && dx == 0 ) printf ( "2\r" ); if ( dy < 0 && dx == 0 ) printf ( "8\r" ); before = now; } } return 0; }
-
Woar, herzlichen dank B.B.
Ich habe es einbisschen verändert. Wenn man die Maus nach oben links so in das Gebiet lenkt, passiert nichts ( 4 - 7 - 8 ). Weiß wer warum?
#include <stdio.h> #include <windows.h> #define WARTE 1000 int main() { POINT now, before; long dx, dy; long dif = 10; GetCursorPos( &before ); while ( 1 ) { Sleep ( WARTE ); while ( GetAsyncKeyState( VK_RBUTTON ) ) { GetCursorPos( &now ); dx = now.x - before.x; dy = now.y - before.y; if(dx>dif || dy>dif) { if ( dy > 0 && dx > 0 ) printf( "3" ); if ( dy < 0 && dx > 0 ) printf( "9" ); if ( dy > 0 && dx < 0 ) printf( "1" ); if ( dy < dif && dx < dif ) printf( "7" ); if ( dx > 0 && dy == 0 ) printf ( "6" ); if ( dx < 0 && dy == 0 ) printf ( "4" ); if ( dy > 0 && dx == 0 ) printf ( "2" ); if ( dy < 0 && dx == 0 ) printf ( "8" ); before = now; } } printf("\n"); now.x = 0; now.y = 0; before.x = 0; before.y = 0; dx = 0; dy = 0; } return 0; }
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Vielleicht hat es mit dem treiber zu tun?
-
Keiner eine idee?