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:

Laufzeit ermitteln

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



Anmeldungsdatum: 07.11.2009
Beiträge: 22
Wohnort: Hagen / Westf.

BeitragVerfasst am: 15.11.2009, 20:12    Titel: Laufzeit ermitteln Antworten mit Zitat

Hallo,

ich suche eine einfache Lösung für folgendes Problem:

Ich möchte die Anschaltzeit eines Ereignisses (z.B einer Pumpe) ermitteln.
Ich stelle mir das so vor, dass ich die aktuelle Zeit bei Beginn des Ereignisses (Pumpe an) in einer Variablen ablege und dann die Zeit am Ende des Ereignisses (Pumpe aus) in eine weiteren Variable und die Differenz berechne und als nn Stunden nn Minuten nn Sekunden ausgebe bzw wegschreibe.

FB 0.20.0 unter Win XP pro


MfG
Dirk
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 15.11.2009, 20:26    Titel: Antworten mit Zitat

Du hast dir deine Antwort doch schon selbst gegeben, woran scheitert es denn?

Falls du nicht weißt, woher du die Zeit bekommst, da gibt es den Befehl Time
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DJS2009



Anmeldungsdatum: 07.11.2009
Beiträge: 22
Wohnort: Hagen / Westf.

BeitragVerfasst am: 15.11.2009, 20:56    Titel: Antworten mit Zitat

MOD hat Folgendes geschrieben:
Du hast dir deine Antwort doch schon selbst gegeben, woran scheitert es denn?

Falls du nicht weißt, woher du die Zeit bekommst, da gibt es den Befehl Time


Danke für den Hinweis auf Time. Da gäbe es noch NOW und noch so ein paar tolle Sachen. Die Lösungsvorschläge sollten sich ehr auf die Berechnung des Unterschieds zwischen der Start- und der Endzeit beziehen und wie man daraus das oben beschriebene Ergebnis erlangt.

MfG
Dirk
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 15.11.2009, 21:06    Titel: Antworten mit Zitat

Ende - Start = Differenz.
Wo ist das Problem?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 15.11.2009, 21:07    Titel: Antworten mit Zitat

Now benötigt vbcompat.bi, Time nicht.

Time liefert einen String mit der Zeit zurück. Du musst die Zahl mit Mid rausnehmen und mit Val in eine Zahl umwandeln. Diese speicherst du in deine Variablen. Das gleiche am Ende nochmal und die Zahlen ganz normal voneinander abziehen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 15.11.2009, 23:48    Titel: Warum DATE$ und TIMER konzeptionell schlecht sind Antworten mit Zitat

DJS2009 hat Folgendes geschrieben:
Danke für den Hinweis auf Time. Da gäbe es noch NOW und noch so ein paar tolle Sachen.

Die Funktion Now() kenne ich von VBScript her natürlich bestens. DATE$ und TIME$/TIMER haben ihre Wurzeln dagegen aus dem GWBASIC-Zeitalter, schuld daran sind INT 21h/AH=2Ah und INT 21h/AH=2Ch. Dass dieses Relikt aus den IBM-PC/XT-Anfängen konzeptionell unschön ist, sollte inzwischen jeder wissen, der in Webanwendungen Sitzungen und damit verbunden Sitzungsablaufzeiten programmiert hat: Zum einen macht TIMER über Mitternacht Rollover-Probleme. Selbst wenn man DATE$ hinzuzieht und das Datum serialisiert, um einen UNIX/Linux-ähnlichen Timestamp-Wert zu generieren, besteht immer noch das Problem, dass beispielsweise DATE$ noch um 23.59 Uhr, 59,99998 Sek. abgearbeitet wird, das anschliessende TIMER aber um 0.00 Uhr 0.00001 Sek. (man beachte den sehr kurzen Zeitabstand, wie er beim Abarbeiten eines Prozeduraufrufs völlig normal ist!): Es würde nun ein 24 h danebenliegender Timestamp-Wert resultieren, weil DATE$ und TIMER nicht atomar als einen Aufruf durchgeführt werden können. Derartige nur sehr selten auftretende Fehler geben dann die berühmten Situationen, wo der Fehler beim Testen eines Systems nie auftritt, dafür aber irgendwann einmal im produktiven Betrieb...

=> Von dem her zerschlägt Now() sämtliche hier diskutierten Probleme vollständig, weil es zum einen eine atomar ausgeführte vollständige Zeitabfrage ermöglicht und daneben erst noch eine saubere und problemlose Zeitarithmetik, bei der man sich nicht um Mitternacht-Rollover-Probleme kümmern muss, weil der Zeitdatentyp einen kontinuierlich Wert darstellt. => Aus gutem Grund beitzt eigentlich jede neuere Programmiersprache und Klassenbibliothek immer ein Pendant zur Now()-Funktion.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DJS2009



Anmeldungsdatum: 07.11.2009
Beiträge: 22
Wohnort: Hagen / Westf.

BeitragVerfasst am: 16.11.2009, 09:29    Titel: Antworten mit Zitat

@ dreael

Vielen dank für die umfanreichen Ausführungen - ich werde die Berechnung mit NOW() durchführen, da mir das weniger aufwendig erscheint als mit Time$ und Date$ oder Timer.

Gruß
Dirk
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 16.11.2009, 13:20    Titel: Antworten mit Zitat

http://www.freebasic-portal.de/code-beispiele/mathematik/now-in-sekunden-umrechnen-145.html


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DJS2009



Anmeldungsdatum: 07.11.2009
Beiträge: 22
Wohnort: Hagen / Westf.

BeitragVerfasst am: 16.11.2009, 14:03    Titel: Antworten mit Zitat

@ TPM

Danke für den Hinweis, werde ich mal ausprobieren. Ich habe inzwischen folgendes mit Now() probiert:

Code:

#include "vbcompat.bi"

Dim Laufzeit As Double
Dim Startzeit As Double
Dim Stoppzeit As Double
DIM Zeit as String
Startzeit=NOW()
SLEEP 20000
Stoppzeit=NOW()
Laufzeit = Stoppzeit-Startzeit
Zeit = Format(Stoppzeit-Startzeit, "hh:mm:ss")
? ZEIT
sleep


MfG
Dirk
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 17.11.2009, 18:22    Titel: Antworten mit Zitat

Wie wärs mit Timer statt Now?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. 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