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

29.10.2005, 10:22

Probleme mit timeGetTime ()

Hallo erstmal, :)

Wollte einfach mal experimentieren und in meine Konsolenanwendung
so eine Art "Nichtspassieren" einbauen, damit man ersteinmal lesen
kann und es dann nach ein paar Sekunden weiter geht.
Das habe ich also so versucht:

C-/C++-Quelltext

1
2
3
4
5
Anfangszeit = timeGetTime ();
do
{
      VergangeneZeit = timeGetTime () - Anfangsezit;
}while (VergangenenZeit <= 5000);

Soweit hat das Programm auch funktioniert, es hat wirklich 5
Sekunden angehalten und dann hat es weitergemnacht.
Das einzige Problem ist, das meine CPU während dieser Pause
zu 100 oder 90% ausgelastet ist(AMD ATHLON 2600). Wenn man nun
größere Programme machen würde, in denen die Zeit ständig
angezeigt wird, dann wäre das schon etwas blöd, wenn die CPU
nur mit der Zeit beschäftigt ist. ???
Hab ich beim Benutzen der Funktion einen Fehler gemacht
oder gibt es da eine ganz andere Funktion?

Bitte bitte antworten, wenn ihrs wisst!

Anonymous

unregistriert

2

29.10.2005, 10:26

Na ja, wenn Du demnächst Spiele Codest wirst Du merken das Dein Spiel auch 100% benötigt ;) Daher sollte Dich das nicht weiter stören.

Du könntest allerdings ::Sleep(5000); benutzen, das blockiert nur Dein Programm, brauchst aber <windows.h>

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

3

29.10.2005, 14:03

Bei Visual Basic gabs eine Methode namens DoEvents(), die dafür gesorgt hat, das erstmal alle Ereignisse verarbeitet werden bevors weitergeht. Damit deine Anwendung eben nicht ausgelastet ist.. Schau mal obs vielleicht ein Äquivalent in C/C++ dazu gibt.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

29.10.2005, 14:24

Skip das macht in C keinen sinn. Du kannst auf Threads warten du kannst alle Nachrichten aus der (Win)Nachrichtenschleife bearbeiten oder du kannst einfach warten(sleep). Auf Nachrichten warten, macht bei einer APP ohne Nachrichtenschleife wenig Sinn ;) . App wie Spiele brauchen nunmal viel Leistung und sie nutzten immer die Max zur Verfügung stehende.
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.

Gelöschter Benutzer

unregistriert

5

22.01.2014, 20:48

Naja, dieses Thema ist zwar etwas veraltet, jedoch habe ich zu timeGetTime() auch eine Frage. Im folgendem Projekt, welches nur aus der main.cpp besteht, wurde für alle Konfigurationen winmm.lib gelinkt, und Windows.h eingebunden. Die Frage ist, warum ich als Wert immer extrem hohe Zahlen (z. B. 94962171):

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <Windows.h>

int main ()
{
    DWORD TEST = timeGetTime();

    std::cout << "Zeit seit Programmstart: " << TEST << std::endl;

    // Warten
    std::cin.get();
    std::cin.ignore();

    // Beenden
    return 0;
}

Tankard

Treue Seele

Beiträge: 192

Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft

  • Private Nachricht senden

6

22.01.2014, 20:51

Läuft dein Rechner zufällig schon etwas über 26 Stunden?

Gelöschter Benutzer

unregistriert

7

22.01.2014, 20:54

nein, ich habe ihn vor ca. 3-4h angeschalten. Als BS habe ich Windows 8.1. [EDIT:] Seltsam, obwohl er aus wahr, steht im Taskmanager bei "Leistung"->"Betriebszeit" 1:02:30:56 ?( Warum?

Tankard

Treue Seele

Beiträge: 192

Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft

  • Private Nachricht senden

8

22.01.2014, 21:02

hast du ihn wirklich runter gefahren oder nur in den Ruhezustand versetzt? Vielleicht wird dann weiter gezählt. Jedenfalls gibt timeGetTime() nicht die Zeit seit Programmstart, sondern die Zeit seit Windowsstart an (in ms).

Gelöschter Benutzer

unregistriert

9

22.01.2014, 21:09

Hier der Grund: http://www.winfuture-forum.de/index.php?showtopic=196364
Jetzt, ca. bei einer Systemzeit von 12min zeigt er 691359 an? Wie darf ich diese Zahl verstehen ?( Kann man diesen 26h-Bug (vielleicht ja auch beabsichtigt) irgendwie vermeiden, weil die Zeit soll für ein kleines Serverprogramm verwendet werden -> soll auch auf anderen Rechnern gehen, und wenn dann solche Zahlen kommen, denken die doch ich bin ein unfähiger Programmierer :D

[EDIT: Es ist kein Bug, hatte es zu diesem Zeitpunkt aber nicht verstanden, dass 691359 Milisekunden sind :rolleyes: ]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »alex41018« (28.01.2014, 20:59)


Tankard

Treue Seele

Beiträge: 192

Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft

  • Private Nachricht senden

10

22.01.2014, 21:17

Das sind doch auch 11,5 Minuten.

Werbeanzeige