Seite 1 von 1

Timer funktion, gibt es die?

Verfasst: 21.06.2009 21:48
von heiße Luft
Hallo Leute,

ich möchte einen Temperatur Messwert, den ich über eine Atmel MEAGA 88 Mikrocontroller Elektronik erfasse, zyklisch auf dem PC abfragen und speichern.
Ich sende über RS232 einen String der eine entsprechende Antwort veranlasst.
Mit einem Klick funktioniert das. Ich finde keine Timer wie in VB.
Muss ich mit ElapsedMilliseconds() selber einen basteln?
Ich habe in einem Post von Kiffi irgendwas von Timer Callback gelesen, finde in der Hilfe aber nichts dazu.
Unter
http://www.purebasic.fr/german/viewtopi ... 22c629d569
gibt’s von HeX0R einen selbst gebauten Timer.
Bissel viel Code nur um alle 10 Minuten eine Lesevorgang zu initialisieren, oder ?

Grüße hL

Verfasst: 21.06.2009 21:56
von X360 Andy
Hier ein kleines Beispiel wie es ganz einfach geht.

Code: Alles auswählen

Zeit = 600000 ; 600 sekunden - 10 Minunten
StartZeit = ElapsedMilliseconds()

Repeat
  
  If ElapsedMilliseconds()-Startzeit>Zeit
    MessageRequester("", "10 Minuten sind um")
    exit = 1
  EndIf
  
Until exit = 1
Oder auch hier ein Thread von mir wo ich eine änliche Frage hatte
http://www.purebasic.fr/german/viewtopi ... ight=timer

Verfasst: 21.06.2009 22:00
von ts-soft
Das beste wäre ein API Timer: http://msdn.microsoft.com/en-us/library/ms644906.aspx
Ansonsten eben auf die nächste PB Version warten.

Lösungen die kein Callback nutzen, bzw. kein Event auslösen wie
EllapsedMilliseconds sind suboptimal, bzw. nicht wirklich verwendbar.

Verfasst: 21.06.2009 22:40
von heiße Luft
@X360 Andy
Ja, das habe ich jetzt ähnlich gemacht.
Bei den Programmiersprachen die ich sonst benutzte gibt es Timer als Grundrüstzeug.
z.B.
Wenn TimerEingang = 1
TimerWatezeit = 1 ms, 1m, 1h

Dann kann ich irgendwo im Code TimerAusgang auf 1 abfragen.
Sehr bequem. Aber mit ElapsedMilliseconds() geht es natürlich auch.
Kann man ja auch mit einer Procedure lösen.
Ich dachte nur es ginge evtl. etwas eleganter und ich finde nur das richtige Schlagwort für die Hilfe wieder mal nicht.

@ Thomas
Ja ja, ich weiß das Du immer sehr gute Tipps gibst. Aber da ich an meiner letzten selbst gestellten Aufgabe
http://www.purebasic.fr/german/viewtopi ... b21589665e
und
http://www.purebasic.fr/german/viewtopi ... b21589665e
gescheitert bin (ganz aufgegeben habe ich es allerdings noch nicht),
beschränke ich mich bei meiner neuen Aufgabe erstmal auf die von PureBasic vorgegebenen Möglichkeiten. Mein Projekt heißt jetzt „Wetterstation“.
Ich erfasse die Daten (erstmal Temperatur und Luftdruck) über den Atmel Mega88.
Für die zyklische Abfrage reicht die Funktion ElapsedMilliseconds() wohl aus.

Viele Grüße hL :allright:

Verfasst: 21.06.2009 22:50
von Kaeru Gaman
mag sein, dass sie "ausreicht"...

aber keinesfalls so, wie von Andy vorgeschlagen, das ist unnütz mit einer ungebremsten Schleife zu prüfen.
ein kleiner Fenster, ein WaitWindowEvent(100), das tuts genauso, Zehntel-Sekunde ist genau genug.

grundsätzlich ist ein Timer, der über ein Event läuft, wirklich besser, da hat ts schon recht.

und wenn dir ein Timer-Callback über API
http://www.purebasic.fr/german/viewtopi ... 509#248509
zu umständlich ist, warte halt ein paar Wochen.