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


Anmelden zum Antworten