Timer abfragen
-
Hallo,
brauche mal wieder ein wenig Hilfe.
Kann man einen Timer abfragen, wenn er so zusagen auf "1" (bool) steht??
Wenn ich das richtig sehe, dann geht das mit den Ereignis OnTimer, aber wie kann ich abfragen, wenn der Timer auf "1" steht.
Ich möchte dann diesen Wert in einer anderen Funktion abfragen.mfg ahl
-
Frage falsch verstanden.

-
ahl schrieb:
Kann man einen Timer abfragen, wenn er so zusagen auf "1" (bool) steht??
Nein, da der Timer keinen derartigen (oder sonstigen) Zustand annimmt.
Wozu soll das denn gut sein, suchst du vielleicht sowas?
http://www.c-plusplus.net/forum/viewtopic.php?t=78377
-
Nein nicht ganz so.
Ganz einfach gesagt, möchte ich anzeigen, wenn der Timer gerade eingeschaltet ist.
Unteranderen möchte die Farbe eines Panel ändern. Ich weiss, man kann es in den Timer schreiben, leider sieht man dann keine Änderung der Farbe. Vielleicht geht es auch zu schnell, dass man es garnicht sehen kann.
Dann müsste ich dabei gehen das Impuls/Pausenverhältnis zu ändern, weiss aber jetzt auch nicht wie das geht.
-
ahl schrieb:
Ganz einfach gesagt, möchte ich anzeigen, wenn der Timer gerade eingeschaltet ist.
Was verstehst du unter "eingeschaltet"?
Falls du wissen willst, ob der Timer geräde läuft, dann kannst du dessen Enabled-Eigenschaft abfragen (siehe aaaabyx).
Wenn du wissen willst, ob die eingestellte Zeit erreicht wurde bzw. abgelaufen ist, dann musst du im OnTimer-Event ein entsprechendes Flag setzen.Mit deinen Ausführungen zum Einfärben des Panels kann ich nichts anfangen.
-
ich meine nicht , wenn er enable oder aktiviert ist.
Ich schreibe Daten in eine Datei und möchte nun anzeigen, wenn die Daten geschrieben werden. Das schreiben übernimmt ein Timer, sein Interval kann vom Benutzer geändert werden.
Jedesmal wenn der Timer die Daten schreibt möchte ich das Schreiben z.B. über ein Panel (LED) oder ein Text in der StatuBar anzeigen.
-
es sieht so aus:
void __fastcall TForm1::Timer3Timer(TObject *Sender) { //Erzeuge das Verzeichnis, falls es nicht existiert AnsiString dir="c:\\Wetterstation"; if (CreateDirectory(dir.c_str(),0)) ShowMessage("Datendatei "+dir+"\\\Daten.txt erstellt"); //Messdaten in Textdatei schreiben mit Zeit und Datum ofstream datei; datei.open("C:\\Wetterstation\\Daten.txt" , ios_base::app); datei<<Now().FormatString("HH:NN:SS '\t' DD.MM.YYYY").c_str()<<'\t'<<Temperatur <<'\t'<<Luftdruck<<'\t'<<Feuchte<<endl; datei.close(); Panel1->Color=clLime; }Jedes mal, wenn das ausgeführt wird, wird Panel1 grün.
Es soll aber nachdem dieses hier beendet wird, das Panel1 wieder grau werden.Edit:
Bitte die Code-Tags benutzen. Danke!
-
Vielleicht zwei Timer verwenden? Einen für das Schreiben und einen, um die "LED" wieder abzuschalten.
Im OnTimer-Ereignis des ersten Timers den zweiten anschalten (Enabled = true) und die LED anschalten.
Im OnTimer-Ereignis des zweiten Timers den zweiten Timer abschalten und die LED abschalten.
Oder das Interval des Timers kleiner wählen und bei jedem n-ten mal die Datei schreiben, dabei auch die LED anschalten.
Jedesmal die LED ausschalten. Über das Intervall kannst Du dann die "Leuchtzeit" einstellen.Gruß,
Alexander
-
So in etwa habe ich mir die Version mit einem Timer vorgestellt:
void __fastcall TForm1::Timer3Timer(TObject *Sender) { static int counter = 0; // LED ausschalten if (++counter == 5) { // Dein Code counter = 0; // LED einschalten } }Gruß,
Alexander
-
hab es jetzt mit zwei Timer gemacht, funktioniert auch, ein kleiner verzug zwischen daten schreiben und anzeigen ist da, ist aber nicht so tragisch, damit kann ich leben.
vielen dank für die hilfe.
-
ahl schrieb:
Jedes mal, wenn das ausgeführt wird, wird Panel1 grün.
Es soll aber nachdem dieses hier beendet wird, das Panel1 wieder grau werden.Logischerweise würde das so aussehen:
void __fastcall TForm1::Timer3Timer(TObject *Sender) { Panel1->Color = clLime; Application-ProcessMessages(); // sicherstellen, dass die Änderung angezeigt wird // dein ganzer Datei-Schreib-Code hier Panel1->Color = clBtnFace; // zurücksetzen }Wenn der Schreibvorgang nur Millisekunden dauert wird natürlich auch die "Lampe" nur für Millisekunden angehen. Wenn du ein längeres Signal wünscht wirst du um einen zweiten Timer kaum herumkommen.
Das Setzen auf Grün sollte aber in jedem Fall vor dem Schreiben erfolgen, dann gibt es auch keinen Verzug mehr.
-
ja ok.
ist ja auch logisch.
danke
-
Wenn die Zeitspanne zu kurz würde ich lieber ein Flag ein einem Timer verwenden, anstatt 2 Timer.
Oder jemand sagt mir, wo ich nachlesen kann, dass Timer mittlerweile unbegrenzt verwendet werden dürfen. Mein letzter Stand der Dinge ist, das Timer unter Windows nur begrenzt zur Verfügung stehen.
EDIT: Hatte die zweite Seite gar nicht gesehen... Ist noch früh...
-
Um den Verbrauch an Timern nicht ausarten zu lassen bietet es sich oft an, einen Zentraltimer immer eben weg z.B. im Sekundentakt arbeiten zu lassen. Alle Programmteile, die eine Zeitsteuerung für Schleifen, Verzögerungen etc. benötigen, können dann dort eine eigenes Flag hochzählen, zurücksetzen usw.