1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Programmaufruf zur vollen Stunde

Dieses Thema im Forum "OS X-Developer" wurde erstellt von Daedalus_666, 08.01.09.

  1. Daedalus_666

    Daedalus_666 Golden Delicious

    Dabei seit:
    20.12.08
    Beiträge:
    11
    Hi,

    ich habe mal wieder ein Problem und google wusste keine funktionierende Antwort (das Orakel von Delphi war irgendwie doch besser).

    Ich möchte eine Funktion (die etwas aus dem Web abruft) nachdem sie bei laden das Programms aufgerufen wird immer zur vollen Stunde wieder ausführen lassen. Kein Problem wenn ich das erste mal die volle Stunde habe und dann mit einem Timer und dem Interval 3600 arbeite. Um die Zeit vom Programmaufruf bis zur ersten vollen Stunde zu ermitteln wollte ich das so machen:
    double jetzt = [NSDate timeIntervalSinceReferenceDate];
    double hour = jetzt/3600;
    // Hier sollte hour abgrundet werden was ich auch noch nicht rausgefunden habe
    double nextHour = (hour*3600)+3600;
    double rest = nextHour-(hour*3600);
    double timer = 3600-rest;
    NSLog(@"jetzt ist:%d", jetzt);
    NSLog(@"hour ist:%d", hour);
    NSLog(@"nextHour ist:%d", nextHour);
    NSLog(@"rest ist:%d", rest);
    NSLog(@"timer ist:%d", timer);
    Die Werte lasse ich mir (noch) ausgeben um sie zu kontrollieren. Hier mal die Werte die ich bekommen habe:
    jetzt ist:-1131801729
    hour ist:138769057
    nextHour ist:-594930817
    rest ist:0
    timer ist:0

    Die Werte sind ja offensichtlich nicht richtig und wechseln auch mal in den positiven Bereich. Neben dem sind ja auch die mathematischen Oprationen nicht richtig gelöst.
    Könnt ihr mir sagen was ich falsch mache?? Bin noch immer Anfänger und komme grad nicht weiter...
    Danke schonmal Daedalus
     
  2. joey23

    joey23 Mecklenburger Königsapfel

    Dabei seit:
    26.11.06
    Beiträge:
    9.736
    Ich verstehe kein Wort von dem was du da schreibst, aber mit iCal lassen sich Programme und Scripte ausführen, zu definierten Zeiten ;)
     
    Tommi gefällt das.
  3. bezierkurve

    bezierkurve Danziger Kant

    Dabei seit:
    12.06.05
    Beiträge:
    3.861
    Wie wär’s mit launchd?
     
  4. landplage

    landplage Admin
    AT Administration

    Dabei seit:
    06.02.05
    Beiträge:
    21.482
    Ich hab zwar keinen Schimmer vom Programmieren, glaube aber zu verstehen, was er meint:
    Irgendeine Aktion soll immer zur vollen Stunde ausgeführt werden.
    Falls schon mal eine Aktion erfolgte, werden einfach 3600 sec. addiert und wieder erfolgt die Aktion.
    Das Programm, das die Aktion anschubst, wird aber nicht genau zur vollen Stunde, sondern zu einer beliebigen Zeit, sagen wir 17.23 Uhr gestartet. Wie kann das Programm jetzt ermitteln, wann es 18.00 Uhr ist und das erste mal die Aktion erfolgen soll?

    So ist doch die Frage. oder?
     
  5. Daedalus_666

    Daedalus_666 Golden Delicious

    Dabei seit:
    20.12.08
    Beiträge:
    11
    Also ich schreibe ein Programm. Eine Funktion soll immer zur vollen Stunde aufgerufen werden.
    Wenn ich mein Programm aufrufe wir die Funktion das erste mal aufgerufen und soll einen NSTimer gesetzt bekommen, dass es die Funktion zur nächsten vollen Stunde wieder ausführen soll. Da ich nicht davon ausgehen kann, dass Menschen mein Prog immer zur vollen Stunde öffnen kann ich den Timer beim ersten mal nicht einfach auf 3600 setzen.
    Wie ich rechnerisch auf die restlichen Sekunden bis zur vollen Stunde komme weiß ich in etwa auch.
    timeintervalsincereferencedate ist ein Intvals in Sekunden.
    Das Interval durch 3600 ergibt die Stunden und die restlichen Sekunden seit der letzten vollen Stunde als Rest. - Mir fällt grad auf, dass ich den Zeitpunkt der nächsten Stunde garnicht brauche ;) - Um auf Sekunden bis zur nächsten Stunde zu kommen muss ich ja nur von 3600 den Rest abziehen und schon kann ich den NSTimer mit dem Interval starten. Nur scheint es ja mit den Werten Probleme zu geben rechnerisch wie generell...
     
  6. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Klar gibt es Probleme :D

    RTF man 3 printf

    WAS für ein Argument erwartet %d ?

    Alex
     
  7. Daedalus_666

    Daedalus_666 Golden Delicious

    Dabei seit:
    20.12.08
    Beiträge:
    11
    *hust* Ja... Erwähnte ich Anfänger?? *g* Danke :)
     
  8. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Dann lies mal was zu Format Spezifiers

    %d erwartet einen Ganzzahlwert (char, short, int, long etc), einen Double-Wert gibst Du mit %f aus

    Alex
     
  9. Daedalus_666

    Daedalus_666 Golden Delicious

    Dabei seit:
    20.12.08
    Beiträge:
    11
    Oh sorry, Mißverständnis. Ich schlug im Manual nach und hatte es schon ;D Aber danke für die nette Hilfe :)
     
  10. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Sind denn jetzt die Werte das, was Du erwartest? ;)

    Alex
     
  11. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Man könnte die Rechnerei auch dem System überlassen.
    Alternativvorschlag:
    Code:
    NSDate *date = [NSDate dateWithTimeIntervalSinceNow:3600.0];
      // Zeitpunkt jetzt +1h
    
    NSMutableString *dateString = [NSMutableString stringWithString:[NSDate description]];
      // Datum/Uhrzeit in einen String mit dem Format "YYYY-MM-DD HH:MM:SS ±HHMM" wandeln
    
    [dateString replaceCharactersInRange:NSMakeRange(14, 5) withString:@"00:00"];
      // Minuten und Sekunden auf 00 setzen
    
    date = [dateWithString:dateString];
      // Und schon haben wir die nächste volle Stunde als NSDate Instanz
      // und können damit eine NSTimer Instanz erzeugen.
    MacApple
     

Diese Seite empfehlen