Interval Timer Function
Download
 Quelltext (4 kB) Quelltext (4 kB)
 MIT-Lizenz MIT-Lizenz
- Plattformen:             
 keine Angabe keine Angabe
 Quelltext enthalten Quelltext enthalten
- Angelegt von  Juppel am 18.12.2021 Juppel am 18.12.2021
Bewertung
Bisher keine Bewertung




Programm Code zu einem bestimmten Zeitpunkt auslösen
dabei die Programmlaufzeit berücksichtigen und die Übergelaufende Zeit zurückgeben.
Do
    'average_throughput_time 'die durchlaufzeit ermitteln
    Print "Do ...."
    If Interval(5) Then
        Print "interval_timeoverflow      : ";interval_timeoverflow
        PRINT "maxinterval_throughput_time: "; maxinterval_throughput_time
        Print "Hello World"
    EndIf
    sleep 200
Loop
Die Funktion:
Dim Shared interval_timeoverflow As Double
Dim Shared intervalTimerStart(100) As Double
Dim Shared  As DOUBLE maxinterval_throughput_time
DIM Shared AS DOUBLE LastTimer(100)
DIM Shared As Integer TimeDim(100)
#define average_throughput_time interval(0)
FUNCTION interval(x1 AS INTEGER) AS DOUBLE
    'den interval ermitteln, wenn dieser Teilbar ist, also kein Rest übrig bleibt
    'dann ist die Zeit erreicht.
    'falls der richtige Zeitpkt. nicht abgefangen wird, da der Programmablauf
    'irgendwo stoppt, dann muss der größte und kleinste Rest überwacht werden.
    'Wenn der Rest wieder kleiner wird, dann ist der Zeitpkt erreicht. oder 0
    'falls der Zeitpunkt nicht erreicht wird, wird auch die Überschrittene Zeit
    'zurückgeliefert, dann kann der Benutzer dies im Programm ausgleichen
    'Interval_Timeoverflow
    'z.B. Interval(2), das Programm benötigt aber 4Sekunden pro durchlauf.
    'dann geht er nach 4 Sek. in diese Function und gibt 2 Sekunden zurück an Interval_Timeoverflow
    '
    'die überschrittene Zeit wird dann in der Function ausgeglichen.
    'nachteil: je nach Systemzeit wird das Programm schon zu früh, evtl. nach 5 Sek statt im Interval
    'gewählten 10Sek. ausgelöst
    Dim nowTimer As Double
    Dim EndTimer As Double
    Dim xdiff As Integer
    Dim x As Integer
    Dim I As Integer
    nowTimer=TIMER
    'die durchlaufzeit des Programms ermitteln und den Timer x entsprechend anpassen
    'wenn dieser zu niedrig gewählt wurde
    If x1=0 Then
        If maxinterval_throughput_time<nowTimer-LastTimer(0) And LastTimer(0)>0 Then maxinterval_throughput_time=nowTimer-LastTimer(0)
        LastTimer(0)=nowTimer
        Exit Function
    EndIf
    ' wenn er pro durchlauf 4 Sek. benötigt und alle 2 Sek. abgefragt werden soll,
    'dann fragt er beim nächsten mal alle 6 Sek. ab, da er zur Sichereiheit noch 2 Sek drauf legt
    'aber z.Zt nicht nötig
    'If x1<interval_throughput_time Then
    '   xdiff=x1
    '   x1=Int(interval_throughput_time)
    '   xdiff=x1-xdiff
    'EndIf
    'x=x1
'---------------------------------------------------
    'Speicherzelle Suchen in der die Zeit hinterlegt ist.
    'hatte leider keine bessere Lösung
    For I=1 To 100
        If TimeDim(i)=x1 Then
            x=i
            Exit For
        EndIf
    Next I
    'wenn die Zeit noch nicht ermittelt wurde, dann eine freie Speicherzelle
    'suchen und beschreiben
    If x=0 Then
        For I=1 To 100
            If TimeDim(I)=0 Then
                TimeDim(I)=x1
                x=I
                Exit For
            EndIf
        Next I
   EndIf
'---------------------------------------------------
    EndTimer=(nowTimer)/x1-Int((nowTimer)/x1)
    IF EndTimer<LastTimer(x) or nowTimer-intervalTimerStart(x)> x1 And intervalTimerStart(x)>0 Then
        If IntervalTimerStart(x)>0 Then
            interval_timeoverflow= (nowTimer-intervalTimerStart(x))
        EndIf
        IntervalTimerStart(x)=nowTimer
        LastTimer(x)=0
        Return True
    Else
        LastTimer(x)=EndTimer
        Return False
    EndIf
END FUNCTION
 Wer ist online?
 Wer ist online? Buchempfehlung
 Buchempfehlung
 FreeBASIC-Chat
 FreeBASIC-Chat
 FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!
			FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!