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



  • Guten Tag liebe Forums-Mitglieder !

    Ich habe dieses Forum gefunden und hoffe hier kann mir mit meinem "kleinen" C++ - Problem geholfen werden:

    Ich möchte für eine bestimmte Zeit einer Variable den Wert 1 zuweisen.
    Nach dieser Zeit soll sie wieder den Wert 0 bekommen.

    Ich hoffe ich habe mein Anliegen kurz und bündig auf den Punkt gebracht und freue mich auf eure Hilfe.

    Danke
    Sebastian



  • Habe Falsche gelesen. Also so ganz einfach würde ich es so machen.

    int wert = 1;
    
    Sleep(1000);//1 sec
    
    wert = 0;
    


  • als spontane möglichkeit fiele mir ein dass du eine variable erzeugst und dann per schleife die aktuelle systemzeit immer weiter abfragst bis dein zeitlimit erreicht ist, da du aber wahrshcienlich nebenbei etwas machen möchtest kannst du die zeit dann eig nur unregelmässig abfragen was zu verspätungen führen könnte, oder du arbeitest mit threads aber aus deiner fragestellung merkt mand ass du noch nicht so viel ahnung hast, weshalb ich vorschlage dass dud ein problem nochmal überdenkst weil man es sicher anders machen kann...

    meine rster vorschalg ist sowas:

    int zeitvariable = 1;
    time_h t1;
    t1 = time(0);
    while ( time(0)-t1 < deineZeit);
    zeitvariable = 0;
    

    aber wie gesagt nebenbei aknnst du entweder ncihts amchen doer der geht immer das was du in die schlefie schreibst durch aber das kann unregelmässig sein



  • 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