Fenster im versteckten Modus verbraucht 100% CPU



  • Hallöchen,

    ich habe folgendes Problem, ich habe ein Programm geschrieben, das ein OpenGL Fenster erzeugt, wenn ich dieses Fenster anzeigen lassen, ist die CPU-Auslastung im normalbereich. Wenn ich allerdings das Programm mit

    ShowWindow(hWnd, SW_HIDE);
    

    verstecke, habe ich bei dem Programm plötzlich eine 100%ige Auslastung der CPU. Woran kann das liegen? Kann ich das irgendwie verhindern?

    Danke für euere Antworten

    P.S.: Das Zeichnen im OpenGL Fenster wird im verstecketen Modus nicht durchgeführt.



  • Hilfeee schrieb:

    P.S.: Das Zeichnen im OpenGL Fenster wird im verstecketen Modus nicht durchgeführt.

    aber vermutlich deine mainloop 😃 zeig sie mal



  • miller_m schrieb:

    Hilfeee schrieb:

    P.S.: Das Zeichnen im OpenGL Fenster wird im verstecketen Modus nicht durchgeführt.

    aber vermutlich deine mainloop 😃 zeig sie mal

    Hallo, das ganze sieht so aus:

    while (!done) // Loop That Runs While done=FALSE
      {
        if (PeekMessage(& msg, NULL, 0, 0, PM_REMOVE)) // Is There A Message Waiting?
        {
          if (msg.message == WM_QUIT) // Have We Received A Quit Message?
          {
            done = TRUE; // If So done=TRUE
          }
          else // If Not, Deal With Window Messages
          {
            TranslateMessage(& msg); // Translate The Message
            DispatchMessage(& msg); // Dispatch The Message
          }
        }
        else // If There Are No Messages
        {
          // Draw The Scene.  Watch For ESC Key And Quit Messages From DrawGLScene()
          if (active) // Program Active?
          {
            if (keys[VK_ESCAPE]) // Was ESC Pressed?
            {
              done = TRUE; // ESC Signalled A Quit
            }
            else // Not Time To Quit, Update Screen
            {
              DrawGLScene(); // Draw The Scene
              SwapBuffers(hDC); // Swap Buffers (Double Buffering)
            }
          }
        }
      }
    

    active wird beim verstecken auf false gesetzt.



  • aber "done" bleibt auf true, somit bist du in einer endlossschleife.



  • miller_m schrieb:

    aber "done" bleibt auf true, somit bist du in einer endlossschleife.

    Natürlich bleibt done auf true, sonst würde sich die Anwendung ja beenden, und das soll sie ja nicht. Außerdem muss die Anwendung noch auch Messages reagieren.



  • Evtl. hilft zu if (active) ein else mit Sleep(0).
    Ansonsten müsstest du evtl. deine Main-Loop so umgestalten, dass du im versteckten Zustand anstelle von PeekMessage GetMessage verwendest 🙂



  • eventuell hilft dann auch WaitMessage



  • Kannte ich noch gar nicht 🙄
    Hört sich aber sehr gut an und ist wohl von der Realisierung her das Einfachste 🙂



  • Danke für eure Hilfe


Anmelden zum Antworten