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

1

18.06.2009, 19:50

Zeitfrage

Hallo,

ich habe folgenden Codeabschnitt :

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
weiter = false;
currentTime = 0;
timeUntilRefresh = 8000;

while(///&& !weiter)

        {
            ////

            if(currentTime > timeUntilRefresh && 1)
            {
                weiter = true;
            }
            currentTime += 10;
            Sleep(10);
        }


hier müsste er aus der while-Schleife hinausspringen falls er 8 sekunden lang die Bedingung nicht erfüllen kann, oder falls er unter 8 sekunden die Bedingung erfüllen kann.

Aber nach 8 Sek macht er nicht weiter sondern immer unterschiedlich, von 6 bis 20 sekunden.

Wieso ist das so ?
Sehe keinen Denkfehler.

lg[/cpp]

2

18.06.2009, 20:11

Re: Zeitfrage

Zitat von »"Unknown"«



hier müsste er aus der while-Schleife hinausspringen falls er 8 sekunden lang die Bedingung nicht erfüllen kann, oder falls er unter 8 sekunden die Bedingung erfüllen kann.

Aber nach 8 Sek macht er nicht weiter sondern immer unterschiedlich, von 6 bis 20 sekunden.

Wieso ist das so ?
Sehe keinen Denkfehler.

lg


Hm, bei mir läuft der Code durch.
Hab ihn zwar etwas geändert, aber das Prinzip blieb von dir erhalten.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool weiter = false;
int currentTime = 0;
int timeUntilRefresh = 8000;

while( !weiter)
        {
            if(currentTime >= timeUntilRefresh)
            {
                weiter = true;
        break;
            }
            currentTime += 10;
       printf("%i\n",currentTime);
            Sleep(10);
        }


Bei mir in der Ausgabe ist 8000 die letzte Zahl.
Ich denke der Ansatz ist richtig, hier ein paar Verbesserungsvorschläge:
1. die Abfrage (if...) ans Ende der Schleife setzen, sonst läuft er nochmal durch
2. && 1 ist unnötig, ist ja immer wahr

Läuft der Code bei dir immer noch nicht? Vll. liegts ja auch an was andrem? Wie gibts du currentTime aus / kontrollierst es?

mfg MM

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

3

18.06.2009, 20:13

Möglicherweise ist sleep einfach nicht genau genug, wenn es in einem so kleinen Bereich aufgerufen wird, dann wartest du vielleicht 15ms und zählst trotzdem nur 10 hoch. vielleicht solltest du lieber die schleife laufen lassen, und die zeit einmal am anfang und einmal am ende nehmen, und dann die differenz berechnen und dahingehend prüfen

die merkwürdigen sachen im code hat mein vorgänger ja bereits entfernt ^^

4

18.06.2009, 20:36

nO_One aussage stimmt =D
Ich musste 8000 auf 1550 runterschrauben, um auf ca 8 sekunden zu kommen.

Danke

lg

5

18.06.2009, 21:09

Sleep ist nur eine empfehlung an das Betriebssystem (mach mal n bissle Pause). Für Zeitmessungen ist das nicht geeignet.
Probiers mal mit timeGetTime
Lieber dumm fragen, als dumm bleiben!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

18.06.2009, 21:12

Sleep ist auch nicht dafür gedachte Termingerecht zu terminieren ;) . Man sagt damit nur, dass man die Prozessorzeit nicht braucht und mindestens N-ms nichts machen möchte. Wenn der Scheduler der Meinung ist, dass andere Threads/Prozesse wichtiger sind, kann man dann schonmal etwas länger außer Gefecht gesetzt sein. Dies kann übrigens auch ohne Sleep passieren, da die Threads alle regelmäßig durchgeschaltet werden und wenn z.B. das System gerade volle Leistung meint zu brauchen verhungern einem mal schnell die Threads.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Werbeanzeige