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.
Timer Hilfe benötigt --- Gelöst
Timer Hilfe benötigt --- Gelöst
Zuletzt geändert von M4rco am 18. Januar 2007 21:50, insgesamt 1-mal geändert.
Schnell und schmutzig:
Zwei bool Variablen irgendwo hin klatschen und beim starten bzw. stoppen einfach auf true oder false setzen,
oder etwas eleganter:
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:
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
'Funktioniert nicht' ist keine Fehlerbeschreibung
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.
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.