Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Interval Timer Function

Downloads » Bibliotheken

Download

Bewertung

Bisher keine Bewertung
(Zum Abstimmen auf die Sterne klicken.)

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