Schlafbefehl?



  • Hi

    Ich habe ein Spiel geschrieben was in einer endlosschleife läuft und im Vollbildmodus. Wenn man jetzt per ALT+TAB auf den Desktop wechselt nutzt das Programm im Hintergrund immernoch 100% CPU Leistung. Durch WM_ACTIVATEAPP kann ich abfragen ob das Programm den Fokus verloren hat. Schön! Aber was muss jetzt gemacht werden damit auch 0% CPU sind?

    while (TRUE)
    {    
            if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
            {
                if (msg.message == WM_QUIT)
                {
                    break;
                }
    
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
            else
            {
    			if (!WindowActivate)
    				continue;
    			else
    			{  /* Das eigentliche Programm */ }
            }
    }
    

    Das if (!WindowActivate) continue; ist so natürlich Schwachsinn, da immernoch eine Schleife durchlaufen wird und das nunmal 100% CPU bedeutet.

    Was muss also geändert werden, damit das Programm wirklich erstmal "schläft" bis es wieder Fokus erhält?

    case WM_ACTIVATEAPP :   if (wParam)
    								{
    									if (!WindowActivate)
    									{
    										WindowActivate=true;
    								    }
    								}
    								else
    								{
    									WindowActivate=false;
    								}
    								break;
    


  • Endlosschleifen und 100% CPU sind prinzipiell schlecht!
    Zum Schlafen kannst Du "Sleep" verwenden...
    Du solltest Dir aber überlegen ob nicht ein Intervall von 50 ms für Dich Ausreicht und dann "SetTimer" verwendest, oder Du verwendest die Multimedia Timer: z.B: timeSetEvent, da kannst Du auch relativ kurze Intervalle angeben...



  • WaitMessage



  • Ah, WaitMessage(). Ja das klappt super. Danke!


Anmelden zum Antworten