Noch kürzer Warten als Sleep(1)



  • Natürlich hat sie das, und weißt Du warum?

    Du sagst Windows schließlich: ich WILL 100% CPU haben!!!

    Nämlich da:

    while(1)
    {
        // Action
    }
    

    Dieser Code hat generell (egal ob Spiel oder nicht) 100% CPU, solange 1 TRUE ist (was es immer ist)...



  • Hepi schrieb:

    Natürlich hat sie das, und weißt Du warum?

    Du sagst Windows schließlich: ich WILL 100% CPU haben!!!

    Nämlich da:

    while(1)
    {
        // Action
    }
    

    Dieser Code hat generell (egal ob Spiel oder nicht) 100% CPU, solange 1 TRUE ist (was es immer ist)...

    Wenn man für "// Aktion" "Sleep(1);" einsetzt hab ich dann aber keine 100%. Also hat der Code nicht generell 100% CPU-Auslastung. Und wie haben das bitte die Spiele OHNE 100% CPU-Auslastung gemacht, wenn nicht mit ner Schleife?



  • Das Verhalten ist logisch wenn man einerseits sagt "ich will 100% CPU" und dann sofort sagt "ich verzichhte auf CPU für mindestens 1 ms", oder?



  • joomoo schrieb:

    Hepi schrieb:

    joomoo schrieb:

    Sag mir mal ein Spiel was permanent 100% CPU-Auslastung hat?

    Call of Duty, Doom III, World War II Online, Medal of Honor: Allied Assault... generell gesagt: Jedes Spiel zieht 100% CPU, da Multitasking und ein Fullscreen 3D-Spiel nicht zusammenpassen (außerdem: Was willst Du nebenher noch tun, wenn Du spielst? Nach Viren scannen? Festplatte defragmentieren?)

    Ja, schon. Oder CD-Image machen, sachen downloaden, cd-brennen, film rippen, etc...

    Noch ein paar Spiele OHNE 100% CPU-Auslastung:
    StarCraft
    WarCraft2
    WarCraft3
    Soldat
    C&C - Generäle
    Midtown Madness 2

    Midtown Madness 2 und Soldat haben nur im Menü keinen 100%, und das ist ja klar. Hmmm... Komisch. Ist mir noch nie aufgefallen. Vielleicht ist das wirklich nicht son großes übel... (ich glaube ihr habt recht)



  • Hepi schrieb:

    Das Verhalten ist logisch wenn man einerseits sagt "ich will 100% CPU" und dann sofort sagt "ich verzichhte auf CPU für mindestens 1 ms", oder?

    Genau. Und ich möchte jetzt wissen wie ich für 1 ms oder weniger auf die CPU verzichten kann.



  • Das ist der Moment an dem ich mich ausklinke.

    Lerne, wie Windows arbeitet.

    Vielleicht verstehst Du es, wenn Du weißt wie Windows arbeitet.

    Momentan hat das mit Dir keinen Sinn (oder andersrum: es hat einen Grund weshalb Spiele 100% CPU ziehen. Oder sind "Götter" wie John Carmack schlichtweg stümperhaft in Deinen Augen?)



  • So langsam verliert der Thread an unwichtigkeit und die Antworter (wie Hepi) erhalten das Gefühl gegen die Wand zu reden. Die 8 Seiten dieses Threads stecken bereits so voller Informationen, das man nur noch sagen brauch: "Ahhh, jetzt ja, Logisch".

    Die Auslastung in Prozent wird durch die Tätigkeit in einer bestimmten Zeit erechnet.
    Führt ein Programm ständig Code aus (while-Schleife), daher es "Pausiert" nicht, hat es 100%
    Übergiebt das Programm wiederum Rechenzeit ans System (Sleep(0)/Sleep(1)), sinckt die Auslastung.
    100% Auslastung bedeutet nicht 100% CPU-Leistung, sonder 100% der zugeteilten Leistung.

    Framebremse und Bewegung nach Zeit wurden auch bereits besprochen, so Denke ich dürfte das Thema nun durch sein, mach das Beste raus.

    Die allerletzte Möglichkeit wäre dann nur noch C64 😃

    EDIT: Upps, jetzt habe ich 9 Seiten raus gemacht.



  • So ok, ich habs verstanden. Ab jetzt werden alle meine Spiele 100% CPU-Zuteilung haben.

    Ich möchte trotzdem gerne wissen wie ich das vermeiden kann, da ich ein Spiel für meine Mudda proggen soll, und deren Laptop ist unerträglich laut bei 100% CPU-Zuteilung.

    Ich möchte bitte keine Antworten wie "100% CPU Auslastung sind ok", "Kauf deiner Mudda nen neues Notebook", "Da musst du an den Einstellungen des Notebooks rumbasteln" oder sonstigen Antworten die nicht mit der Lösung des Problems zu tun haben. Ich denke der Thread ist nur deswegen so lang, da ich nicht gegen ne Wand rede sondern die anderen, sie scheinen mich nicht richtig zu verstanden zu haben. Meinetwegen kann ich auch einen neuen Thread aufmachen, wenn euch soviele Seiten stören.

    mfg.



  • Mit nem (Multimedia)Timer



  • Timer schrieb:

    Mit nem (Multimedia)Timer

    Ja danke das funktioniert! Hier meine entgültige Schlafe-Funktion:

    void Schlafe(unsigned char was)
    {
     int x = cm.elapsed_milliseconds();
     HANDLE warte = CreateEvent(NULL, FALSE, FALSE, NULL);
     WaitForSingleObject(warte, was-1);
     while (true)
     {
      if(cm.elapsed_milliseconds()-x >= was)
       return;
     }
    }
    

    mfg.



  • Ich glaub bei eingeschaltetem vsync pausiert der GraKa-Treiber die Anwendung glaube ich sogar selbst - beim backbuffer mit frontbuffer tauschen - bis zum nächsten vsync...
    ...quasi nen internes sleep()
    Dieses Halbwissen möchte ich allerdings lieber nicht ohne diese Anmerkung, dass es sich um Halbwissen handelt, posten 😃

    (Imho halte ich es eh für schwachsinnig die graka mehr frames pro sekunde rendern zu lassen, als das angeschlossene display darstellen kann... - http://de.wikipedia.org/wiki/Vsync )



  • geeky schrieb:

    Ich glaub bei eingeschaltetem vsync pausiert der GraKa-Treiber die Anwendung glaube ich sogar selbst - beim backbuffer mit frontbuffer tauschen - bis zum nächsten vsync...
    ...quasi nen internes sleep()
    Dieses Halbwissen möchte ich allerdings lieber nicht ohne diese Anmerkung, dass es sich um Halbwissen handelt, posten 😃

    (Imho halte ich es eh für schwachsinnig die graka mehr frames pro sekunde rendern zu lassen, als das angeschlossene display darstellen kann... - http://de.wikipedia.org/wiki/Vsync )

    ich bin selbst auch nicht so gut darinn informiert, aber wenn dem so wehr könnten wir Windows schneller in die Tonne tretten, als einige es sich wünschen.

    Nein Nein dem kann ich, auch ohne es besser zu wissen in dieser Richtung nicht zu sprechen, aber in anderer Richtung sagen, das ein Treiber kein so großen Einfluss nehmen kann.

    Die zweite Angabe von geeky gefällt mir schon besser, und auch Logischer, aber die Ausage bei Medien im Allgemein erklingt noch Logischer (Film/TV/Game/etc.)
    "Das Auge (bzw. das Sehzentrum im gehirn) findet keinen Unterschied zwischen 50 Bilder/Sekunde und 100 Bilder/Sekunde für die Warnehmung, aber es ist augeschonender, 25-30 Bilder/Sekunde sind Ausreichend und mit zu 50 kaumm einen Unterschied zu erkennen.

    Zu diesem Thema habe ich mal eine demo gesehen, 2 fenster (OGL) neben einander, das Linke mit 60FPS und das Rechte mit 180 FPS, kein unterschied warnehmbar.
    Warum? Das sagte geeky bereits!


Anmelden zum Antworten