Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

wie viele Sekunden nach Programmstart vergangen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
php1



Anmeldungsdatum: 07.01.2005
Beiträge: 6

BeitragVerfasst am: 13.01.2005, 15:07    Titel: wie viele Sekunden nach Programmstart vergangen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 13.01.2005, 15:32    Titel: Antworten mit Zitat

Dazu nimmst du dann besser "TIMER"

Dumemr Fehler peinlich 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. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 13.01.2005, 17:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 13.01.2005, 17:43    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 13.01.2005, 18:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
php1



Anmeldungsdatum: 07.01.2005
Beiträge: 6

BeitragVerfasst am: 13.01.2005, 20:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 13.01.2005, 20:45    Titel: Antworten mit Zitat

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. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 13.01.2005, 23:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 14.01.2005, 00:21    Titel: Antworten mit Zitat

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 zwinkern

t = FIX(TIMER)
DO:LOOP WHILE FIX(TIMER) = t
...

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz