Timer Hilfe benötigt --- Gelöst

Alles rund um die Programmierung mit Qt
Antworten
M4rco
Beiträge: 4
Registriert: 2. Januar 2007 09:39

Timer Hilfe benötigt --- Gelöst

Beitrag von M4rco »

Hallo,

ich habe ein simples Problem denke ich, jedoch drehe ich mich im Kreise seit einigen Abenden.

Ich habe 2 Timer die über die Q_Object Klasse deklariert wurden.
Q_Timer.h ist nicht eingebunden und sollte, wenn es ohne geht auch nicht werden. Auf jeden Fall sollen die bestehenden Codeelement nicht verändert sondern bestenfalls nur ergänzt werden.


Definition der Timer in Projekt.h

int timername1, timername2;


Die Timer werden gestartet in Methoden von Projekt.cpp mit

timername1 = startTimer(int value);

und beendet mit:

killTimer(timername1);


Mein Problem ist nun folgendes:

Ich möchte verhindern, dass der Timer 2/ bzw. die Methode in der er aufgerufen wird gestartet werden kann, wenn der Timer1 gerade ausgeführt wird.

Ohne QTimer.h ist wohl auch die isActive Methode des Objekts logischerweise nicht benutzbar. Damit wäre die Überprüfung wohl möglich.

Im QTimerEvent () lässt sich ja auf die ID mit timerId überprüfen, jedoch nützt dies nichts, da jeder Timer der einmal ausgeführt wurde eine ID vergeben bekommt, dies sagt jedoch nichts darüber aus, ob der Timer gerade aktiv ist oder nicht.

Bitte um Hilfe, stehe auf dem Schlauch. Bestimmt ist es nur eine Zeile Code die zur Lösung fehlt.
Zuletzt geändert von M4rco am 18. Januar 2007 21:50, insgesamt 1-mal geändert.
Tarek
Beiträge: 46
Registriert: 3. Oktober 2005 14:29
Kontaktdaten:

Beitrag von Tarek »

Schnell und schmutzig:
Zwei bool Variablen irgendwo hin klatschen und beim starten bzw. stoppen einfach auf true oder false setzen,

oder etwas eleganter:

Code: Alles auswählen

class MeineKlasse:public QObject{
   [...]
   public:
      int startTimer(int value){
         / * QObject::startTimer(value) aufrufen   *
           * und IsTimerRunning setzen                */
      }
      void killTimer(int id);
      bool isTimerRunning(int id);
   private:
      bool IsTimer1Running;
      bool IsTimer2Running;

};
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Auch wenn ich nicht kapiere warum man keinen QTimer benutzen darf (und was stattdessen benutzt wird), würde ich in startTimer() die Timer in einer Liste zu speichern und mit einer neuen Funktion a'la isTimerRunning(int id) die Timer zu überprüfen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
M4rco
Beiträge: 4
Registriert: 2. Januar 2007 09:39

Beitrag von M4rco »

Danke ich habe es nun endlich hinbekommen.

Es ging wie Tarek schon sagte, ziemlich einfach mit bool Flags. Hatte ich auch vorher schon einige Male versucht, aber irgend ein Timer ging dann nie vollkommen korrekt. Jetzt funktioniert es aber, anscheinbar hatte ich zuvor immer einen der Flags an einer nicht ganz richtigen Position abgelegt. Außerdem habe ich mich auch zu sehr darauf versteift gehabt die Überprüfung in der TimerEventMethode selbst erst vorzunehmen, was aber vollkommender Quatsch ist, da es dann ja schon zu spät ist.
Antworten