Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
php1
Anmeldungsdatum: 07.01.2005 Beiträge: 6
|
Verfasst am: 13.01.2005, 15:07 Titel: wie viele Sekunden nach Programmstart vergangen |
|
|
Hallo,
wie kann ich herausfinden, wie viele Sekunden nach einem Programmstart in QBasic vergangen sind ?
Ich habe herausgefunden, dass man sich mit Time$ die aktuelle Uhrzeit anzeigen lassen kann, aber ich weiß nicht, wie ich diese Zeit dann in Sekunden umrechnen soll.
Danke für eure Hilfe.
Gruß php1
Zuletzt bearbeitet von php1 am 05.11.2007, 19:41, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Gremlin

Anmeldungsdatum: 12.12.2004 Beiträge: 142 Wohnort: Heinsberg
|
Verfasst am: 13.01.2005, 15:32 Titel: |
|
|
Dazu nimmst du dann besser "TIMER"
Dumemr Fehler Berichtigt
Code: | StartZeit! = TIMER
PRINT "Zeit vergangen seit Start: "
DO
LOCATE 1,28
PRINT INT(TIMER - StartZeit!)
X$ = INKEY$
LOOP WHILE X$ = ""
' Aktualisiert die Sekunden-Anzahl immer wieder, bis eine Taste gedrückt wurde. |
TIMER zählt übrigens die Sekunden, die seit 0:00 vergangen sind. _________________ Tja, hier konnte ihre Werbung stehen.
Pech gehabt.  |
|
Nach oben |
|
 |
Jan

Anmeldungsdatum: 04.01.2005 Beiträge: 74
|
Verfasst am: 13.01.2005, 17:09 Titel: |
|
|
du kannst auch einfach so machen:
Code: |
'Zu Anfang einfach:
anfang = TIMER
'Dann deinen Code
'bla
'bla
'So hier ist nun das Ende
ende = TIMER
'Nun musst du einfach die Differenz bilden, und hast die verstrichene Zeit in Sekunden.
differenz = ende - anfang
print differenz
end
|
|
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 13.01.2005, 17:43 Titel: |
|
|
TIMER wird gerne für Spiele eingesetzt, und um einfach nur die Sekunden zu messen, ist er sicher ein "legales" Mittel, aber irgendwann reicht die Auflösung eben nicht mehr.
Das Problem hatten viele Progger schon, und auch ich stehe jetzt davor.
Wie also kann man eine KURZE Wartezeit erzeugen, gerade kurz genug, um etwa ein Einzelbild einer Animation anzuzeigen?
Anfänger verwenden hier immer codes wie diesen hier:
FOR warte = 0 TO 5000: NEXT
Sicher, es ist eine Lösung, aber jeder PC braucht eben unterschiedlich lange für so eine Schleife. Und mit
start = TIMER
DO: LOOP WHILE start + delay >= TIMER
erzeugt man einfach zu lange Zeiten.
Ich hab's auch schon so versucht:
Code: |
SUB GetRuns
start = TIMER
runs = 0
DO
runs = runs + 1
LOOP WHILE start + 1 >= TIMER
END SUB
...
SUB MakeDelay (sek AS SINGLE)
delay = sek * runs
DO
tmp = tmp + 1
LOOP UNTIL tmp = delay
END SUB
|
(runs ist hierbei natürlich eine COMMON SHARED Variable)
Eigentlich sollte hier gezählt werden, wie oft eine DO-LOOP-Schleife in einer Sekunde durchlaufen wird. Aber hier kommen jedes mal unterschiedliche Werte für runs raus, was wahrscheinlich daran liegt, dass nicht immer genau zum Sekundenanfang zu zählen begonnen wird.
Wie also lässt sich hier etwas ändern?
Danke schon mal für euere Hilfe!
Have a nice day - Ciao! _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 13.01.2005, 18:48 Titel: |
|
|
dein Beispiel funktioniert nicht da die Schleife wo du nur die Teile da zählst die du später benutzen willst die Schleife wesentlich schneller durchgearbeitet wird, am Ende läuf also das programm dann langsammer...
Man müsste ein Programm so schreiben, dass es beim laufen ständig die FPS kontrolliert und anpasst, diese Runs-Variable also ständig aktualisiert aber das hab ich noch nie versucht da das dann in Physiksimulationen wo man eben Zeitwerte braucht nix bringt.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
php1
Anmeldungsdatum: 07.01.2005 Beiträge: 6
|
Verfasst am: 13.01.2005, 20:08 Titel: |
|
|
Das Programm soll z.B. nach 10 Sekunden xy machen und nach 12 Skunden yyyblablabla. Das ganze soll über eine Schleife geregelt werden.
Könnte man TIMER jetzt auch noch auf null Stellen nach dem Komma runden ?
Danke
php1
Zuletzt bearbeitet von php1 am 05.11.2007, 19:41, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Gremlin

Anmeldungsdatum: 12.12.2004 Beiträge: 142 Wohnort: Heinsberg
|
Verfasst am: 13.01.2005, 20:45 Titel: |
|
|
php1 hat Folgendes geschrieben: | Könnte man TIMER jetzt auch noch auf null Stellen nach dem Komma runden ? |
Das gleiche erreichst du mit meinem Code.
Da wird der Wert von TIMER, den er am Anfang des Programm hatte, in einer Variable gespeichert, dann wird dieser Wert vom TIMER abgezogen und mit INT() "gerundet".
Anführungszeichen, weil INT() nicht "korrekt" rundet, sondern nach diesem Varfahren vorgeht:
INT(x%) liefert die größte ganze Zahl, die kleiner oder gleich x% ist.
Um dann eine Abfrage zu machen, kannst du folgenses schreiben:
Code: | StartZeit! = TIMER
DO
IF TIMER = StartZeit! + 10 THEN END ' Bedingung nach 10 Sekunden
' In diesem Fall Ende.
X$ = INKEY$
LOOP WHILE X$ = "" |
_________________ Tja, hier konnte ihre Werbung stehen.
Pech gehabt.  |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 13.01.2005, 23:42 Titel: |
|
|
Hallo
Du kannst doch mit TIMER die Zeit messen, die eine leere Schleife z.B. für 100000 Durchläufe oder so braucht und und dann die Pausenschleifen entsprechend gross machen. So kannst du das Tempo an den Rechner anpassen.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 14.01.2005, 00:21 Titel: |
|
|
Hallo !
Dusky_Joe hat Folgendes geschrieben: | TIMER wird gerne für Spiele eingesetzt, und um einfach nur die Sekunden zu messen, ist er sicher ein "legales" Mittel, aber irgendwann reicht die Auflösung eben nicht mehr.
Das Problem hatten viele Progger schon, und auch ich stehe jetzt davor.
Wie also kann man eine KURZE Wartezeit erzeugen, gerade kurz genug, um etwa ein Einzelbild einer Animation anzuzeigen? |
Zur genaueren Zeitmessung als mit TIMER habe ich hier schonmal was geschrieben:
http://212.168.28.138/cgi-bin/forum/forum.pl?session=&Imsg=26021
Für deine Zwecke sollte eine Auswertung des oberen Bytes genügen. Damit kommst du auf eine Auflösung von ca. 0,2 ms. Eben 256 mal besser als mit TIMER.
Zitat: | Eigentlich sollte hier gezählt werden, wie oft eine DO-LOOP-Schleife in einer Sekunde durchlaufen wird. Aber hier kommen jedes mal unterschiedliche Werte für runs raus, was wahrscheinlich daran liegt, dass nicht immer genau zum Sekundenanfang zu zählen begonnen wird.
Wie also lässt sich hier etwas ändern? |
Dann beginne doch immer zum Sekundenanfang an zu zählen
t = FIX(TIMER)
DO:LOOP WHILE FIX(TIMER) = t
...
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
|