CPU-Auslastung zu hoch !!
-
ich schreibe derzeit unter MS VC++ an einem Server mit einer eingabe konsole :
d.h. dort kann man per befehl noch einige einstellungen machen usw.aber die CPU auslastung ist durch die endlossschleife viel zu hoch
wie kann ich das anders machen ?for (; { MSG message; if (::PeekMessage(&message,NULL,0,0,PM_REMOVE)) { ::TranslateMessage(&message); ::DispatchMessage(&message); } //Thread text ausgaben if ((!islocked) && (StdOutput != "")) { islocked = TRUE; cout << "\n" << StdOutput << "\n>>"; StdOutput = ""; islocked = FALSE; } else //Benutzereingaben hier if (kbhit()) { cin >> in; switch (HandleUserInputs(in) ) { case 1 : return 0; break; case 2 : ShowHelpScreen(); break; default : cout << "\nUnbekannter Befehl : " << in; } cout << "\n>>"; }
EditBySideWinder: Code-Tags einfügen!
[ Dieser Beitrag wurde am 22.06.2003 um 14:40 Uhr von SideWinder editiert. ]
-
Tausch PeekMessage mit
BOOL GetMessage( LPMSG lpMsg, // message information HWND hWnd, // handle to window UINT wMsgFilterMin, // first message UINT wMsgFilterMax // last message );
dann klappts, denn die wartet auf eine Message und legt die Schleife so lange schlafen. PeekMessage wartet nicht.
EditBySideWinder: Code-Tags eingefügt.
[ Dieser Beitrag wurde am 22.06.2003 um 14:40 Uhr von SideWinder editiert. ]
-
Dann werden die Konsoleneingaben aber nicht mehr bearbeitet (bzw. erst, wenn eine Windows-Nachricht eingetroffen ist)
Ein Loesungsansatz waere, das ganze in 2 Threads laufen zu lassen.
-
oder ein Sleep(10); reinfummeln.
-
Ups - so weit hab ich gar nicht gelesen - nur bis zum PeekMessage