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

Alles rund um die Programmierung mit Qt
Antworten
KarlBlau
Beiträge: 41
Registriert: 25. März 2005 14:31
Wohnort: Karlsruhe
Kontaktdaten:

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

Beitrag 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
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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?
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

du könntest einfach die beidne Zeiten subtrahieren. Dass muss ja nicht Sekundengenau gehen oder?
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
KarlBlau
Beiträge: 41
Registriert: 25. März 2005 14:31
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag 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
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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 :?:
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Per API????

Das geht einfach nur über den Befehl.
KarlBlau
Beiträge: 41
Registriert: 25. März 2005 14:31
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag 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
Antworten