for Schleife mit zeitlicher unterbrechnung



  • hallo,
    ich würde gerne ein label im Formular von oben nach unter laufen lassen und benutze eine for / oder do while Schleife.

    For (Int32 i=0;i<=200;i++)
    {
    labelFangmich->Top::set(labelFangmich->Top::get()+1);
    // hier möchte ich eine zeitliche verzögerung einbauen nur wie?
    // sonst läuft das label schneller runter als ich schauen kann.
    //Thread::sleep(); // ist nicht die lösung.

    }

    kann mir jemand einen tip geben wie oder wo ich einen ansatz finde um vieleicht mit Timers zu arbeiten ?
    vieleicht zeit holen und 2 sekunden später die schleife weiter ausführen?

    vielen dank
    bernd



  • for (int i=0;i<=200;i++) 
    { 
    	labelFangmich->Top::set(labelFangmich->Top::get()+1); 
    	// hier möchte ich eine zeitliche verzögerung einbauen nur wie? 
    	// sonst läuft das label schneller runter als ich schauen kann. 
    	Thread::Sleep(10); // ist nicht die lösung. 
    }
    

    Du bekommst kein Error bei Thread::Sleep();?
    Ohne Überladung...

    Use CodeTex please....



  • hallo

    ich bekomme keinen ERROR, weder beim compelieren noch bei der Ausführung.
    Das Form wird ausgeführt , ich drück den startbutton, das label fangt an sich nach unten zu bewegen , nach einiger zeit (wohl prozessor abhänging) kommt die "sanduhr" von windows und nicht geht mehr weiter, bis sämtliche durchläufe von sleep abgearbeitet sind dann springt das label an die endposition .

    Thread::sleep(); ist überladen und kann mit
    Thread::sleep(1000); je eine Sekunde angehalten werden .
    ich möchte aber den Thread selbst nicht anhalten , da dann das Form nicht mehr ansprechbar ist. und andere aktionen nicht mehr ausgeführt werden.
    Ich suche eine methode mit der ich die zeit abfragen kann, dann in einer weiteren Schleife warte bis 2 Sekunden vergangen sind und dann das label einen Schritt weiter nach unten setze.

    private: System::Void buttonStart_Click(System::Object^ sender, System::EventArgs^ e) {
    Int32 counter = 0;

    while(counter <= 20)
    {
    String^str;
    str = Convert::ToString(counter);

    do
    {

    labelFangmich->Top::set(labelFangmich->Top::get()+1);

    //Thread::SpinWait(1000000);
    Thread::Sleep(1000);

    }while(labelFangmich->Top::get() <=200);

    labelFangmich->Top::set(0);

    counter++;

    };

    labelFangmich->Top::set(0);

    }}



  • wird Zeit für Thread & Delegaten ... Alternativ kannst Du auch mit einem Timer arbeiten - würde ich aber nicht empfehlen



  • ok ,

    ich gebe auf,

    sobald ich den stepsize auf 1 setze wird früher ,weniger später das Form
    angehalten und die sanduhr kommt. wenn ich es mit Time, was jetzt auskommentiert ist , versuche kommt das ganze zum stocken und kann nur noch mit X button und anschliessender abfrage weil Form ohne Rückantwort beendet werden.

    private: System::Void buttonStart_Click(System::Object^ sender, System::EventArgs^ e) {
    Int32 counter = 0;
    Int32 zeitunterschied = 0;
    TimeSpan diff1;

    while(counter <= 20)
    {
    /String^str;
    str = Convert::ToString(counter);
    /
    labelcounter->Text::set(Convert::ToString(counter));
    labelcounter->Update();

    do
    {

    /* DateTime date1 = DateTime::Now::get();

    do
    {
    DateTime date2 = DateTime::Now::get();
    diff1 = date1 - date2;
    zeitunterschied = diff1.Milliseconds::get();
    }while(zeitunterschied >= -1);
    */

    labelFangmich->Top::set(labelFangmich->Top::get()
    + Convert::ToInt32(comboBoxStepsize->Text::get()));
    Thread::Sleep(1000);

    }while(labelFangmich->Top::get() <=200);

    labelFangmich->Top::set(0);

    counter++;

    };

    labelFangmich->Top::set(0);

    }

    Fazit: ich bleibe wohl bei Thread.
    Vielen Dank für eure Unterstützung



  • Sag mal Alter, bist Du zu Blöd um die CodeTags zu benutzen...

    Geh wo Du kommst Alter, ich lese mir den Scheiß so nicht durch, Du voll Assi.

    private: System::Void buttonStart_Click(System::Object^ sender, System::EventArgs^ e) { 
    Int32 counter = 0; 
    Int32 zeitunterschied = 0; 
    TimeSpan diff1; 
    
    while(counter <= 20) 
    { 
    /*String^str; 
    str = Convert::ToString(counter);*/ 
    labelcounter->Text::set(Convert::ToString(counter)); 
    labelcounter->Update(); 
    
    do 
    { 
    
    /* DateTime date1 = DateTime::Now::get(); 
    
    do 
    { 
    DateTime date2 = DateTime::Now::get(); 
    diff1 = date1 - date2; 
    zeitunterschied = diff1.Milliseconds::get(); 
    }while(zeitunterschied >= -1); 
    */ 
    
    labelFangmich->Top::set(labelFangmich->Top::get() 
    + Convert::ToInt32(comboBoxStepsize->Text::get())); 
    Thread::Sleep(1000); 
    
    }while(labelFangmich->Top::get() <=200); 
    
    labelFangmich->Top::set(0); 
    
    counter++; 
    
    }; 
    
    labelFangmich->Top::set(0); 
    
    }
    

    Lass mich bloß in Ruhe und gehe Kack....



  • mogel schrieb:

    wird Zeit für Thread & Delegaten ... Alternativ kannst Du auch mit einem Timer arbeiten - würde ich aber nicht empfehlen

    Was hast du denn gegen Timer?
    Lieber selbst mit Invoke rumfrickeln? Oder willst du GUI Elemente direkt aus nem anderen Thread aufrufen?



  • [quote="hustbaer"]

    mogel schrieb:

    wird Zeit für Thread & Delegaten ... Alternativ kannst Du auch mit einem Timer arbeiten - würde ich aber nicht empfehlen

    Was hast du denn gegen Timer?

    das doppelt Auslösen, wenn der Timer eigentlich erneut feuert aber noch nicht abgearbeitet ist und somit das Event in der Meldeschleife wartet ... passiert zumindest mit einem Thread nicht



  • [quote="Kalle FN"]

    Sag mal Alter, bist Du zu Blöd um die CodeTags zu benutzen...

    Geh wo Du kommst Alter, ich lese mir den Scheiß so nicht durch, Du voll Assi.Lass mich bloß in Ruhe und gehe Kack....

    void main(void) 
    { 
    
    Console::WriteLine("Mach du es besser wenn du dich nicht richtig auskennst."); 
    Console::Write("Dir hat deine Mama kein Anstand beigebracht und daher sage ich als papa dir gerne wie Mensch es macht."); 
    Console::WriteLine("Es wäre schön wenn du die Button´s unterhalb des Eingabefensters benutzen könntest damit der ""Code"" vernünftig angzeigt wird ");
    Console::WriteLine("und wir es besser lesen können. Ein erfahrener Programmierer/ Benutzer dieser Plattform. Danke  "); 
    
    }
    

    😉 👍



  • Doug_HH schrieb:

    Use CodeTex please....

    vielen dank habe leider nicht ganz verstanden was du gemeint hast.
    habe dazugelernt und werde es besser machen.

    Danke.


Anmelden zum Antworten