Hallo, ich brauche in meinem Programm eine Pausenfunktion, da ich Digitale Ausgänge ein und ausschalte. Habe es so probiert, allerdings wird meine eingegebene Pausenzeit nicht eingehalten, es ist immer viel kürzer. Habe ein Modul erstellt: Public Sub Delay(nSekunden As Long) Dim TimeOut As Long TimeOut = (GetTickCount / 1000) + nSekunden Do Application.DoEvents Loop Until TimeOut < (GetTickCount / 1000) End Sub Was mache ich flasch?
Was macht denn GetTickCount? Und, versuch mal
1 | Thread.Sleep(nSekunden * 1000) |
Achso, GetTickCount macht folgendes: Public Declare Function GetTickCount Lib "kernel32" () As Long
Also vermutlich wird die Anzahl der Ticks seit anno irgendwann zurück gegeben. Nichtsdestotrotz würde ich den Thread.Sleep(int) Aufruf verwenden. Allerdings weise ich noch darauf hin, dass beide Varianten nicht genauer als 9 bis 11 Millisekunden arbeiten. Das liegt an der Vergabe der Timeslots vom Betriebssystem. (glaub ich zumindest)
Oder mal das Programm aufräumen, meistens sind Warteschleifen unnötig.
Sven H. schrieb: > Also vermutlich wird die Anzahl der Ticks seit anno irgendwann zurück > gegeben. Die Anzahl Millisekunden seit der PC gestartet wurde. Läuft nach 49,7 Tagen über, aber Windows stürzt eh vorher ab. ;-) > Allerdings weise ich noch darauf hin, dass beide Varianten nicht genauer > als 9 bis 11 Millisekunden arbeiten. Das liegt an der Vergabe der > Timeslots vom Betriebssystem. (glaub ich zumindest) Ich meine es waren 16 ms.
> Nichtsdestotrotz würde ich den Thread.Sleep(int) Aufruf verwenden.
Aha und warum? Ich sehe keine Gründe das Programm in dem Fall zu
pausieren. Ich würde eher einen Timer laufen lassen und dessen Wert in
einem Thread abfragen. Wird ein Zählerwert erreicht -> Signalpolarität
ändern, fertig ist...
Geist schrieb: > Aha und warum? Ich sehe keine Gründe das Programm in dem Fall zu > pausieren. Ich würde eher einen Timer laufen lassen und dessen Wert in > einem Thread abfragen. Wird ein Zählerwert erreicht -> Signalpolarität > ändern, fertig ist... na das ist ja umständlich - soetwas wird üblicherweise mit einem Sleep und einen Thread gemacht.
Hab es jetzt mit Thread.Sleep gemacht, funktioniert, danke!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.