Seite 1 von 1

[gelöst] Funktion soll täglich aufgerufen werden

Verfasst: 15. September 2005 10:20
von KarlBlau
Hallo,

ich habe ein Programm, dass permanent geladen ist. Nun soll das Programm einmal täglich zu einer vorgegebenen Uhrzeit eine Funktion aufrufen. Wie macht man das am besten?

Ich habe mir schon folgendes zurechtgelegt:

Code: Alles auswählen

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(callMyFunction()));
timer->start(86400000);  // 86400000 MSek = 1 Tag
Dann müsste ich den timer->start() aber genau zur richtigen Zeit ausführen.
Das könnte man wiederum mit einem SingleShot-Timer machen, dem man die Zeitdifferenz von der vorgegebenen Uhrzeit minus jetzt in Millisekunden gibt.

Gibts da noch eine andere Möglichkeit?

Gruß, Karl

Verfasst: 15. September 2005 10:30
von FlorianBecker
Du testest mit dem Timer welche Uhrzeit ist und führst dann genau zu einer bestimmten Uhrzeit deine Aktion aus. Hat den Vorteil, dass das Programm auch nur genau zu dieser Uhrzeit laufen müsste. Kennst du Cron?

Verfasst: 15. September 2005 11:41
von BartSimpson
du könntest einfach die beidne Zeiten subtrahieren. Dass muss ja nicht Sekundengenau gehen oder?

Verfasst: 15. September 2005 11:47
von FlorianBecker
Mh, gibt es nicht mehr für weniger? Ich finde das ausgesprochen umständlich was und wie du das Problem lösen willst. Mach ein Zeit gesteuerten Cronjob, damit musst du über so banale Dinge gar nicht erst nachdenken. Gut, ist immer einfach zu sagen, wenn man nicht weiß, was der andere vor hat, aber es kann einfach nicht so umständlich sein, wie wir das bisher besprechen.

Verfasst: 15. September 2005 12:49
von KarlBlau
Genauigkeit von +- einer Minute sind für meine Zwecke absolut ausreichend. Die Idee mit dem Timer, der jede Minute einmal prüft ob der richtige Zeitpunkt ist, gefällt mir bisher am besten.

Das Programm muss unter Linux und Windows lauffähig sein. Damit fällt wohl die Sache mit Cron weg. Wenn ich das richtig verstanden habe, habe Cron nur unter Linux zur verfügung?!?

Gruss, karl

Verfasst: 15. September 2005 13:00
von BartSimpson
Mir ist zumindestens keine Cron version für Windows bekekannt.
Es gibt zwar auch unter Widows was vergleichbares. Aber wie man jetzter per API dort Einträge reinbekommt sehr grosses :?:

Verfasst: 15. September 2005 13:18
von FlorianBecker
Per API????

Das geht einfach nur über den Befehl.

Verfasst: 15. September 2005 14:12
von KarlBlau
Ich habs nun so gelöst:

Code: Alles auswählen

// im Konstruktor
downloadTime = new QTime;
downloadTime->setHMS(15, 30, 0);
timer = new QTimer(this);
timer->start(60000);          // each minute
connect(timer, SIGNAL(timeout()), this, SLOT(timeMinute()));

void myClass::timeMinute(void)
{
      QTime now=QTime::currentTime();
      // Genauigkeit von einer Minute reicht:
      if (now.minute()==downloadTime->minute() && now.hour()==downloadTime->hour())
      {
            std::cout << "Es ist mal wieder soweit..." << std::endl;
            myFunction();
      }
}
Das ganze scheint auch ganz gut zu funktionieren.

Vielen Dank für eure Hilfe,

Gruss, Karl