100% Auslastung vermeiden



  • Grüße!

    Wie vermeide ich eigentlich eine 100% ige Auslastung eines Prozesses?

    while(running) 
    	{
    	    if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) 
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
            }
    		else
    			;
        }
    

    Selbst wenn ich nur einmal die Sekunde etwas machen möchte muss ich einen timer haben und immer Vergleichen und bin schon wieder bei 100%...

    Prozess auf IDLE stellen hat auch nix gebracht...



  • Emm...Was soll deine Schleife da oben denn bezwecken ?



  • Garnix. Aber WENN ich jetzt immer vergleiche bis 10 Sekunden vergangen sind, dann etwas tue, wieder vergleiche bis....

    Dann sind das trotzdem 100%...

    Bei Borland MFC fügt man einfach nen Timer Objekt ein und hat nur minimale Auslastung... wie mache ich das in C++ Express?



  • lol, deine Frage ist reichlich unpräzise und irgend wie sinnlos (hab auch noch nit mit Borland gearbeitet und hab das auch nicht vor) aber in der WinAPI gibt es auch Timer (-> SetTimer/KillTimer oder etwas genauer: timeSetEvent/timeKillEvent, siehe MSDN).



  • Sleep(1); millisekunden


  • Mod

    Man kann natürlich die Applikation selbst mit einem Timer steuern, wenn die Aktion eben nicht zu schnell aufeinenaderfolgen soll (Auflösung >50ms).
    Fensteranlegen SetTimer ausführen und auf WM_TIMER reagieren. Dann benötigst Du den Message Pump so nicht.

    Die ist klar warum es 100% Auslastung gibt?
    Das Programm fragt nach einer Nachricht, ist keine da, wird sofort "nichts" ausgeführt und sofort wieder gefragt ist eine Nachricht da.
    Sleep ist eine (aber nicht so gute Lösung).
    MsgWaitForMultipleObjects ist flexibler und reagiert besser.



  • Warum baust du deine Schleife nicht so auf:

    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    

  • Mod

    @eas: Weil er damit nichts im Background machen kann, also dann wenn keine Nachricht mehr abzuarbeiten ist.


Anmelden zum Antworten