Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

12.09.2004, 22:27

Unterschied zwischen Sleep und Schleife

Hallo,

hat das eine dem anderen gegenüber einen Vorteil?

A:
Sleep(1000);

oder
B:

DWORD a = 0;
DWORD b = timeGetTime();
while (a < 1000)
{
a = timeGetTime() - b;
}

Was macht sich besser?

MfG und Danke

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

2

12.09.2004, 23:27

Hi,

ich würde direkt Sleep nehmen, obwohl mir jetzt persönlich kein Grund einfiehle wieso ich einen "Programmschlaf" benutzen sollte.

Wofür brauchst Du sowas denn?

- Patrick

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

12.09.2004, 23:45

afaik gibt sleep den prozessor während der zeit ab...

Anonymous

unregistriert

4

12.09.2004, 23:57

Brauch ich für eine 1-sekündige Pause inmitten einer Funktion.

.. Rendere ein paar Bilder und Sprites
.. Pause
.. Rendere ein paar andere Bilder und Sprites

Da der User da nichts zu tun soll in diesen Vorspann, muss ich irgendwo mal kurz anhalten.
Bei Sleep() weiß ich aber nicht ob Windows dann nicht irgendeine tolle Anwendung rausholt wenn grad schonmal Zeit ist.
Dabei fällt mir noch ein:
Kann das verhindert werden, dass plötzlich zwischendurch mal sowas wie die Zusammenstellungsdaten für die Systemwiederherstellung zusammengesucht werden? Das lahmt.

AC

Frischling

  • Private Nachricht senden

5

13.09.2004, 02:28

stell dir mal vor, dass alle anwendungen busy loops verwenden würden... vor lauter nichts-tun käme man ja zu garnichts mehr.
problem mit sleep ist aber, dass du dich nicht darauf verlassen kannst, genau nach der angegeben zeit wieder geweckt zu werden.

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

6

13.09.2004, 02:31

dot hat's gesagt.
Windows ist ein Multitaskingbetriebssystem und daher sollte unbedingt sleep genutzt werden. Eine Sekunde ist sehr viel; Dass z.B. Windows sich das doppelte, also 2 Sekunden "klaut" ist recht unwahrscheinlich. Sachen die Windows in dieser Zeit macht sind entweder Sachen die anderes Beschleunigen oder aber die irgendwann sowieso gemacht werden. Da ist es besser, sie werden gemacht, wenn der Computer sowieso auf den Benutzer warten soll.
"Games are algorithmic entertainment."

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

7

13.09.2004, 02:38

Zitat


problem mit sleep ist aber, dass du dich nicht darauf verlassen kannst, genau nach der angegeben zeit wieder geweckt zu werden.


Das sehe ich nicht als Sleep spezifisches Problem. Sagen wir, Du machst Sleep und wirst erst nach 1.1 statt 1.0 Sekunden geweckt. Dies ist nach meiner Erfahrung SEHR unwahrscheinlich, es wird eher 1.001, aber ok.

Wenn Du aber b benutzt und 1 Sekunde den Rechner nichts sinnvolles machen lässt, ist die Wahrschinlichkeit, dass er jetzt unbedingt etwas tun muss (z.B. Daten aus Cache auf Platte schreiben) viel grösser und wenn er sich jetzt 0.1 Sekunden einfach nimmt, hast Du den selben Effekt (Gesamtwartezeit 1.1 Sekunden).

Ein Sleep beschleunigt den Computer danach, da eben danach weniger Zeit für Betriebssystem benötigt wird. Diesen Effekt kann man auch in Spielen nutzen, indem in schnellen Frames etwas geschlafen wird, und dadurch es weniger langsame Frames danach gibt. Ausserdem ist der Unterschied schnell zu langsam nicht mehr so gross. In BoB wird dies genutzt und Microsoft macht es in Combat Flight Simulator (weiss nicht mehr, welche Version) wohl auch so.
"Games are algorithmic entertainment."

8

14.09.2004, 00:28

sleep ist wahrlich nicht die genaueste Art um so was zu machen. Hab es mal gegen RDTSC laufen lassen. Da sieht man schnell wie ungenau Sleep sein kann.

Zitat

Windows ist ein Multitaskingbetriebssystem und daher sollte unbedingt sleep genutzt werden.
Windows 1.0 war auch ein Multitasking System. Du meintest wohl ein Multi Threading System :) Aber wenn man 1 sec nichts macht kann man darauf gehen das in der zwischenzeit ein anderer Thread da noch reingequetscht wird.

Bis auf die Ungenauigkeit von Sleep gibt es keinen Unterschied zwischen einer Schleife und Sleep. Ich weis zwar nicht ob Sleep hier intern mit Event's Arbeitet (was ich eher bezweifle), aber das ist die einzigste Möglichkeit um einen Thread wircklich pausieren zu lassen.

Unter Linux kann man das ganze eh vergessen. Die Möglichkeiten sind hier stark eingeschrängt. Wenn dein Code als nicht nur genau sein soll, sondern auch Portabel, dann nimm eine Schleife und bastel dir damit eben schnell eine eigene Sleep Funktion die mit RDTSC Arbeitet. Denn Sleep wird unter Linux intern auch nur eine Schleife laufen lassen und dann stellt sich die Frage ob die mit RDTSC arbeitet.

PS:
Dem OS ist es egal ob man nun eine Schleife für eine pseudo pausierung nutzt, oder ein Event. Auf ein Event sollte man aber verzichten da die recht langsam sind ;)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige