eine Sub jede minute starten

16/09/2007 - 21:37 von Carsten Schade | Report spam
Hallo!

Ich habe folgendes Problem:

Ich möchte eine Prozedur zur jeden vollen Minute +10 Sekunden starten.
Im Moment starte ich das Programm genau zu diesem Zeitpunkt und lasse dann
ein Schleife laufen, die dann alle 60 Sekunden die Prozedur startet:

For i = 1 To 32000
startzeit = System.Environment.TickCount
datencollect(canBus1,d3) 'meine Prozedur
stopzeit = System.Environment.TickCount
testzeit = stopzeit - startzeit
If testzeit < 60000 Then
System.Threading.Thread.Sleep(60000 - testzeit)
End If
Next

Das Problem ist, dass das nicht genau hinkommt, weil zwischen der Zuweisung
an testzeit und dem "schlafen" auch Zeit vergeht.
Ich möchte lieber, das das Programm selber die Uhr auswertet und merkt, wann
es 10 sek. nach der vollen Minute ist. Aber ich kriege das nicht
Ressourcensparend hin... (Schleife mit Uhr abfragen...)

Hat jemand eine Idee?

Vielen Dank im Voraus!

Carsten
 

Lesen sie die antworten

#1 Oliver Tell
16/09/2007 - 22:42 | Warnen spam
"Carsten Schade" wrote:

Hallo!

Ich habe folgendes Problem:

Ich möchte eine Prozedur zur jeden vollen Minute +10 Sekunden starten.
Im Moment starte ich das Programm genau zu diesem Zeitpunkt und lasse dann
ein Schleife laufen, die dann alle 60 Sekunden die Prozedur startet:

For i = 1 To 32000
startzeit = System.Environment.TickCount
datencollect(canBus1,d3) 'meine Prozedur
stopzeit = System.Environment.TickCount
testzeit = stopzeit - startzeit
If testzeit < 60000 Then
System.Threading.Thread.Sleep(60000 - testzeit)
End If
Next

Das Problem ist, dass das nicht genau hinkommt, weil zwischen der Zuweisung
an testzeit und dem "schlafen" auch Zeit vergeht.
Ich möchte lieber, das das Programm selber die Uhr auswertet und merkt, wann
es 10 sek. nach der vollen Minute ist. Aber ich kriege das nicht
Ressourcensparend hin... (Schleife mit Uhr abfragen...)

Hat jemand eine Idee?

Vielen Dank im Voraus!

Carsten




Du könntest System.Windows.Forms.Timer benutzen. Zuerst legst du ein
Zeitintervall fest, dann startest du den Timer. Beim Timer.Tick Event rufst
du dann deine Prozedur auf, die alle x Sekunden laufen soll.
Alternativ kannst du auch System.Timers.Timer benutzen, da heißt der Event
dann "Elapsed".

Ähnliche fragen