katastrophale Performance
-
Hallo

Ich habe folgendes Programm:
#include <windows.h> #pragma comment(lib, "User32.lib") HWND HWC3 = FindWindow(NULL,TEXT("Warcraft III")); void keydown() { HWND SetActiveWindow(HWC3); SendMessage(HWC3,WM_KEYDOWN,VK_OEM_4,0); SendMessage(HWC3,WM_KEYDOWN,VK_OEM_6,0); } void keyup() { HWND SetActiveWindow(HWC3); SendMessage(HWC3,WM_KEYUP,VK_OEM_4,0); SendMessage(HWC3,WM_KEYUP,VK_OEM_6,0); } void schliessen() { HWND SetActiveWindow(HWC3); SendMessage(HWC3,WM_KEYUP,VK_OEM_4,0); SendMessage(HWC3,WM_KEYUP,VK_OEM_6,0); } int main() { if (!HWC3) { MessageBox(0, TEXT("Du musst erst Warcraft III starten"), 0, 0); } else { while (true) { if(GetAsyncKeyState(VK_HOME)) { keydown(); } if(GetAsyncKeyState(VK_END)) { keyup(); } if(GetAsyncKeyState(VK_ESCAPE)) { schliessen(); } } } }Wenn ich Warcraft gestartet hab, und das Programm starte, funktioniert dieses Programm zwar, aber es verbraucht annähernd 100% der Prozessorleistung.
Liegt das an der while (true) Schleife ? Und wenn ja, was kann ich dagegen tun ?
Vielen Dank !
-
Den Thread für kurze Zeit schlafen legen....
Ein yield ändert zwar nix an der Prozessorauslastung, allerdings
haben andere Prozesse "Vorrang".
-
ok, also bei ich sleep() ein. Die Idee is schon mal super
Und was meintest du mit dem yield ??

-
bastel ein Sleep(1) in die while-schleife rein.
-
BetterPerformance schrieb:
Ein yield ändert zwar nix an der Prozessorauslastung, allerdings
haben andere Prozesse "Vorrang".Ein "Yield()" ändert in 32-Bit-Code genau nichts:
winbase.h schrieb:
/* * Compatibility macros */ ... #define Yield()
-
ok brauch ich ja auch net. Sleep() funktioniert wunderbar !
-
hmm ... vllt eher mal deinen Code auch umstellen?
#include <windows.h> #pragma comment(lib, "User32.lib") void key_down(HWND hWnd) { if (hWnd == NULL || IsWindow(hWnd) == FALSE) return; SetActiveWindow(hWnd); SendMessage(hWnd, WM_KEYDOWN, VK_OEM_4, 0); SendMessage(hWnd, WM_KEYDOWN, VK_OEM_6, 0); } void key_up(HWND hWnd) { if (hWnd == NULL || IsWindow(hWnd) == FALSE) return; SetActiveWindow(hWnd); SendMessage(hWnd, WM_KEYUP, VK_OEM_4, 0); SendMessage(hWnd, WM_KEYUP, VK_OEM_6, 0); } void close(HWND hWnd) { if (hWnd == NULL || IsWindow(hWnd) == FALSE) return; key_up(); } int main() { HWND hWndWarcraft3 = FindWindow(NULL, TEXT("Warcraft III")); if (hWndWarcraft3 == NULL || IsWindow(hWndWarcraft3) == FALSE) { MessageBox(NULL, TEXT("Bitte starten Sie \"Warcraft III\"!"), TEXT("Fehler"), MB_OK | MB_ICONERROR); return; } bool stop = false; while (!stop) { if (GetAsyncKeyState("a")) stop = true; if (GetAsyncKeyState(VK_HOME)) key_down(hWndWarcraft3); if (GetAsyncKeyState(VK_END)) key_up(hWndWarcraft3); if (GetAsyncKeyState(VK_ESCAPE)) close(hWndWarcraft3); Sleep(100); } }
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
(...) // if (GetAsyncKeyState("a")) // "a" -> 0x61 -> VK_NUMPAD1 if (GetAsyncKeyState(0x41)) // 0x41 -> VK_A (...)
-
merker schrieb:
(...) // if (GetAsyncKeyState("a")) // "a" -> 0x61 -> VK_NUMPAD1 if (GetAsyncKeyState(0x41)) // 0x41 -> VK_A (...)
(...) // if (GetAsyncKeyState("a")) // "a" -> 0x61 -> VK_NUMPAD1 // if (GetAsyncKeyState(0x41)) // 0x41 -> VK_A if (GetAsyncKeyState('A')) (...)