Variable für bestimmte Zeit [s] auf 1 setzen



  • Zunächst einmal danke für eure Antworten !

    Unter Zeit verstehe ich z.B. 3 Sekunden.
    Für diese 3 Sek. ab Zeitpunkt X (z.B. Starttime) soll die Variable auf 1 sein.
    Danach eben wieder auf 0.

    Ausgesprochen würde das so klingen:

    1. Hole die aktuelle Zeit (A) und lege sie ab
    2. Hole die aktuelle Zeit (B) und lass sie laufen
    3. Für B - A < 3 --> Variable = 1, sonst Variable = 0

    Das Programm soll aber während den 3 sek. weiterlaufen....

    Leider gibt es folgende Einschränkung:
    Ich darf keine while Scleifen nehmen...nur if und for sind "erlaubt"

    mfg



  • SPaap schrieb:

    Das Programm soll aber während den 3 sek. weiterlaufen....

    wenn das unbedingt so sein soll, dann kannst du nur threads nehmen
    aber ich nehm an, dass das für den anfang zu schwer wird

    oder nicht ??



  • Was spricht denn gegen die Sleep-Variante? Die Zeit,wieviel Sec gewartet werden soll, ist doch dynamisch anpassbar.



  • Firefighter schrieb:

    Was spricht denn gegen die Sleep-Variante? Die Zeit,wieviel Sec gewartet werden soll, ist doch dynamisch anpassbar.

    Das Programm schläft aber dann statisch während der Zeit, anstatt das es weiterläuft 😉



  • Stimmt. Das wäre nicht Sinn der Sache, ok dann ist meine Slepp-Variante nicht das passende.



  • Das Programm schläft aber dann statisch während der Zeit, anstatt das es weiterläuft

    so ist es



  • gib uns am besten mal die aufgabe...
    so ist das etwas schwer zu sagen

    und naja for und while die kann man beide in einadner umwandeln

    for als while:

    // for(int i = 0; i <= 10; ++i)
    int i = 0;
    while ( i <= 10 )
        ++i;
    

    while als for

    //while ( a < 5 )
    for( ; a < 5 ; )
    

    wobei man sich als lehrer da etwas verarscht vorkommen könnte xD



  • SPaap schrieb:

    Leider gibt es folgende Einschränkung:
    Ich darf keine while Scleifen nehmen...nur if und for sind "erlaubt"

    Na dann nimm doch for anstatt while:

    while (t2 < time(0))
    {
    ...
    }
    
    for (;t2 < time(0);)
    {
    ...
    }
    


  • Skym0sh0 schrieb:

    wobei man sich als lehrer da etwas verarscht vorkommen könnte xD

    der Lehrer der sowas aufgibt, hat's ja auch net anders verdient



  • int i = 1;

    void testfunktion(clock_t begin)
    {
    if(clock() - begin > 3 Sekunden)
    i = 0;
    }

    int main()
    {
    clock_t begin = clock();
    for(...)
    {
    testfunktion(begin);
    if(i == 0);
    break;
    normaler Programmlauf ...
    }

    weiter im Text ...

    }

    Wenn der normale Programmlauf nicht in der for-Schleife abbildbar ist, bleibt wohl nur ein zweiter Thread, der nach Zeitablauf die Variable manipuliert.



  • Warum nicht sowas? Keine Ahnung ob clock() jetzt die korrekte Funktion dafür ist aber etwas in der Art ist doch am simpelsten.

    template <typename T>
    class TimedVar{
    public:
      TimedVar(T start, T end, double dur) : startValue(start), endValue(end),
         duration(dur){
        startTime = clock();
      }
    
      T get(){ return (clock() >= duration + startTime ? endValue : startValue; }
    
    private:
      T startValue, endValue;
      double startTime, duration
    
    };
    

Anmelden zum Antworten