100% CPU Frage



  • moin,

    wenn ich mit alt+tab aus meinem programm gehe (directdraw) habe ich immernoch 100% CPU nutzung, obwohl ich nichts mehr darstelle .. wie ist das zu erklären?



  • dann zeig mal deine nachrichtenschleife. normalerweise ist das ne endlosschleife die die ganze zeit durchläuft ohne pause -> 100 % auslastung



  • das habe ich verpeilt .. habe mich so am optimieren des darstellens etc konzentriert, das ich total vergessen habe das ich in ner while noch bin.

    mmhh .. wie würde jetzt die beste lösung aussehen .. ne framerate berechnen und zu diesem zeitpunkt das bild dann darstellen?



  • aus den nehe tutorials. ich denke ist selbsterklärend 😉

    case WM_ACTIVATE:                           // Watch For Window Activate Message
            {
                if (!HIWORD(wParam))                    // Check Minimization State
                {
                    active=TRUE;                        // Program Is Active
                }
                else
                {
                    active=FALSE;                       // Program Is No Longer Active
                }
    
                return 0;                               // Return To The Message Loop
            }
    


  • ich stehe aufn schlauch .. sorry

    wenn ich das jetzt in die WindowFunc funktion einbaue .. dann habe ich ja immernoch meine while schleife .. wenn ich das aktive wie hier im beispiel einsätze, muss sich doch das programm beenden wenn ich mit alt+tab rausgehe. irgendwie glaub habe ich nen brett vor der stirn, das ichs net raff ..

    while (active)
        {    
            if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
            {
                if (msg.message == WM_QUIT)
                {
                    break;
                }
    
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
            else
            {
                   Rendern();
            }
            }
    


  • while (TRUE)
        {   
            if(!active) {
                 WaitMessage();
            }
            if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
            {
                if (msg.message == WM_QUIT)
                {
                    break;
                }
    
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
            else
            {
                   Rendern();
            }
            }
    


  • wenn ich das so mache und mit alt+tab rausgehe .. ist cpu zwar auf 0% .. aber wenn ich wieder reinwill .. verschwindet der button aus der task zusammen mit dem prog 😞



  • ups mein fehler ich hatte was eingebaut um zu testen und vergessen die abbruchbedingung wieder rauszunehmen 😃

    mal ne andere frage bei wiederherstellung

    in WindowFunc:

    case WM_ACTIVATEAPP:    
    if (wParam)
    {
       WindowActivate=true;
       restore=1;
    }
    else
    {
       WindowActivate=false;
       restore=0;
    }
    

    in schleife:

    while (TRUE)
    {    
       if(!active)
       {
          WaitMessage();
       }
       if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
       {
          if (msg.message == WM_QUIT)
          {
             break;
          }
    
          TranslateMessage(&msg);
          DispatchMessage(&msg);
       }
       else
       {
          if (!WindowActivate)
          {
             continue;
          }
          else if (restore==1)
          {
             DDraw.RestoreAll();
             restore=0;
          }
    
          Rendern();
          .......
    
    //------------------------------------------------
    
    void DirectDrawClass::RestoreAll(void)
    {
    lpDD7->RestoreAllSurfaces();
    }
    

    wieso bekomme ich dann aber trotzdem ein halb zerstörtes bild?



  • aus nehe

    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
            {
                if(active)
                {
    
    // rendern usw.......
                }
            }
        }
    

    vielleciht geht es so ???



  • zu spät 😃


Anmelden zum Antworten