60 ausgaben die Sekunde in C++
-
Hallo,
mein Problem ist wie schon beschrieben. Ich muss eine bestimmte anzahl an Ausgaben in der Sekunde machen. 1, 2, 4, 8, 16, 32 oder 60 je nach einstellung.
Das Programm empfängt und sendet daten über die RS232-Schnittstelle. Je nachdem welche Einstellung gesetzt ist, soll es einmal die Sekunde, zweimal, viermal, achtmal usw. Daten an die RS232 senden.Ich habe keine Ahnung wie ich das machen soll.
bitte um Hilfe.
Danke!
:schland:
-
Hier gibts eine Klasse für die serielle Kommunikation:
http://www.codeproject.com/KB/system/serial.aspx
-
Du hast keine Ahnung wie man
A) die RS232 abfragt
wie man einen Timer nutzt
Was denn nun?
-
Wie man den Timer benutzt ^^
60mal die sekunde in gleichen abständen ein signal senden ..
RS232 ist kein problem
-
Zuerst sollte Dir klar sein das Windows kein Echtzeitsystem ist.
Die Auflösung liegt bei ca 15ms. Du kannst also alle 15 ms einen Timer auslösen.
Sicher kannst Du aber nicht sein das dies passiert.
Es gibt in Windows dann aber auch noch den Mutimediatimer.
-
Naja am einfachsten ist es, wenn man den Timer auf 1000ms einstellt und dann einfach einen Counter mitzählen lässt und mittels switch oder if dann bei z.B. 32, 48, usw. zu reagieren. Wenn er bei 60 ist, einfach den Counter auf 0 Setzten und es fängt von Vorne an.
Schau dir dafür mal OnTimer an, der sollte dafür reichen.
Wenn du es ganz genau brauchst, dann solltest du dir wie Unix-Tom schon erwähnte den Multimediatimer anschauen oder QueryPerformance. Beide sind allerdings etwas komplizierter.
-
Mh...
Ich hab noch keine Code und bin noch am Planen...
Im Moment soll es so aussehen, dass ich in einer Schleife bin solange wie er auf befehle wartet...
Also muss ich in dieser Schleife auch die Signale senden (Je nach eingestellter herz-zahl halt)
Und wie ich in dieser Schleife dann einen timer verwende, ist mir nicht ganz klar.Ich hatte schonmal im Sinn, dass es nur mit multithreading ne vernünftige lösung dafür gibt...
Für das empfangen und stetige Senden von Signalen
-
Vllt. solltest du mal dein komplettes Problem/Vorhaben schildern. Klingt nacht etwas mehr als nur ein einfaches Timer-Problem.
-
Nun gut
eigentlich hab ich schon alles beschriebenEin Simulator für ein elektrisches Termometer.
Es soll ein Programm werden, was immer daten sendet (über RS232). Und zwar mit einer bestimmten frequenz (einmal die sekunde, zweimal, ... 60mal).
Abgesehen von diesem senden, soll es aber auch auf empfangene Befehle reagieren wie z.b. bei einem bestimmten Befehl die Daten, die es sendet, anders zu formatiert zu schicken.Es muss nicht absolut genau sein... wenn es alle 16ms sendet anstatt bei allen 16,6ms oder mal ein signal auslässt ist es nicht schlimm (bei der einstellung 60Hz). Es soll ungefär hinkommen.
Um Daten per RS232 zu emfpangen, brauche ich (nachdem was ich bis jetzt herausgefunden habe) eine endlosschleife die immer wieder den Buffer durchguckt, ob ein Befehl reingekommen ist oder nicht.
Das ist kein Problem... Nur wie ich gleichzeitig empfange und dabei kontinuierlich sende ist mir noch nicht ganz klar ^^
-
Für das Senden könnte der normale Timer noch reichen. Allerdings ist der Abhängig von der Systemlast. Soll heißen, dass wen viele Programme laufen, dass dein Timer evtl es nicht schafft die Zeit einzuhalten. Der Multimediatimer sollte da aber abhilfe schaffen und ist auch nicht viel komplizierter.
Für das Empfangen würde ich einen extra Thread starten, der das Pollt. Dann ist das aus deinem Programm ausgekoppelt und blockiert nicht alles. Im Thread kannst du dann deine Schleife laufen lassen und auf Events reagieren oder Daten an dein Haupt-Thread weiterleiten.
-
Naja gut sowas dachte ich mir schon ^^
alles klar vielen danke(btw. ich weiß nich obs doof kam aber ich hab noch nie was in c++ mit nem Timer gemacht O_o
naja ich schau es mir mal an ^^ )
MfG
Durara