Countdown / Timer in Arrays



  • Hallo,

    ich habe ein kleines Problem mit einer Aufgabe, die ich schreiben soll. Ich habe bereits Google und die Suche-Funktion bemüht, aber nichts gefunden, was so auf mein Problem eingeht, dass es einen Lösungsansatz darstellen würde.

    Folgendes Problem:
    Ich habe ein Array, bei dem ich in mehreren Feldern eine Art Countdown einsetzen muss. Es ist egal, ob ich vorwärts oder rückwärts zähle oder die Systemzeit als Referenz nehme oder so, aber folgendes soll passieren:

    Falls ein bestimmtes Ereignis eintritt, starte ich in einem freien Feld den Countdown/Timer. Ich laufe in regelmäßigen Abständen den Array entlang und frage bei jedem Feld die verstrichenen Zeit ab. Ist diese Zeit größer als eine halbe Stunde (oder = 0 beim rückwärts zählen), muss ich einen bestimmten Wert verändern. (Zeitüberschreitung)

    Leider habe ich aber überhaupt keine Ahnung, welches Format ich benutzen kann oder wie man das Problem angehen könnte. In dem Array befinden sich ca. 100 solcher Felder

    Programmieren tue ich auf Ubuntu 7.10, laufen soll es dann auf SuSe 9.3 und höher.

    Bin über jegliche Ansätze glücklich.



  • hmm.. ich selbst hab kein linux hier, kann deshalb die fkt.-namen nur raten, aber ich würds so machen:

    template <typename T>
     struct data
      {
       static int TTL; //time to life...
       T real_data;
       int timestamp;
       data (const T &_real_data)
        : real_data (_real_data), timestamp (GetTimeStamp /*kein plan ^^*/ ())
        {};
       bool should_erase (void)
        {
         return ((GetTimeStamp () - timestamp) >= TTL);
        }
      };
    
    std::vector <data> arr;
    
    arr.push_back (data <float> (3));
    arr.push_back (data <float> (3.1));
    arr.push_back (data <float> (3.14));
    arr.push_back (data <float> (3.141));
    arr.push_back (data <float> (3.1415));
    arr.push_back (data <float> (3.14159));
    arr.push_back (data <float> (3.141592));
    arr.push_back (data <float> (3.1415926));
    
    const std::vector <data>::iterator end (arr.end ());
    for (std::vector <data>::iterator iter (arr.begin ()); iter != end; ++iter)
     {
      if (iter->should_erase ())
       {
        iter = arr.erase (iter);
       }
     }
    

    so vll?

    bb : )



  • Also danke erst Mal für Deine Antwort, aber ich verstehe nicht ganz, was genau mir das sagen soll 🙂

    Mein Forumname ist Programm; ich bin Neuling, deshalb müsste das auch ein wenig erläutert werden.

    Vielleicht kannst Du das ja noch tun oder jemand anders hat noch eine weitere Idee.



  • dachte eigtl, dass das verständlich genug ist...

    ganz grob: Du hast nen array, was nicht aus deinem eigentlichen typ besteht sondern aus ner klasse, wo dein typ und der timestamp drin ist...

    und was genau verstehst du nicht?


Anmelden zum Antworten