Timer

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von RoulettePilot.

    @SveFriRo
    Es existiert eine Variable die hochzählt, wie viele Sekunden schon vergangen sind. Da nur ganze Sekunden hochgezählt werden, empfiehlt sich ein Integer als Datentyp. Beim Start des Timers wird diese Variable auf 0 gesetzt und im Timer-Tick-Event immer um 1 erhöht (Var+=1). Gleichzeitig änderst du den Text des Labels in den Wert der Variable (Stichwort ToString()). Bevor du die Variable im Tick-Event um 1 erhöhst, muss überprüft werden ob Var schon die 180 erreicht hat. Falls die 180 bereits erreicht sind, lässt du die MessageBox aufpoppen. Wenn nicht wie bereits erläutert einfach +=1.

    Gruß
    Switcherlapp97
    RubiksCubeSolver


    Jetzt im Showroom

    SveFriRo schrieb:


    was heißt dieses var?

    irgendein VariablenNamen deiner Wahl

    VB.NET-Quellcode

    1. Dim Counter As Integer = 0
    2. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    3. Counter = 0
    4. Label1.Text = Counter.ToString
    5. Timer1.Interval = 1000
    6. Timer1.Start()
    7. End Sub
    8. Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    9. Counter += 1
    10. Label1.Text = Counter.ToString
    11. If Counter >= 180 Then
    12. Timer1.Stop()
    13. MsgBox("Ferddisch")
    14. End If
    15. End Sub




    Edit: Counter zu Counter.ToString geändert.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RoulettePilot“ ()

    ja sicher... .tostring..
    da aber er es aber merkt, weiss er, das da eine Integer einem Text übergeben wird, und da er das weiß (er würde mich ja darauf hinweisen),
    kann er es ja auch selber machen, da er beide Typen kennt.
    (anders wäre es, wenn ich nicht direkt "Integer" gesagt hätte sondern nichts (obect), aber wie gesagt, da er beide typen kennt, weiß er was zu tun ist
    Weil der Timer ein Event liefert, und man so die vergangene Zeit im Label anzeigen kann,
    ohne eine zeit-/Ressourcen-fressende Schleife zu machen.

    Und für sowas wurde glaube ich der Timer gemacht :)

    Es soll ja keine Zeit gestoppt werden, sondern zu einer fest definierten Zeit etwas ausgelöst werden. z.B. die Messagebox

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „RoulettePilot“ ()

    Man kann mit ner Stopwatch auch alles anzeigen. Ein Timer ist ungenau und für Zeitmessung nicht geeignet. Siehe faxe1008's Post.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Er hat doch recht. Ein Timer dient dazu Dinge in einem bestimmtent ungefähren Intervall abzufragen, wenn kein Event zur Verfügung steht. Die StopWatch ist für Zeitmessungen da. Du sagst doch auch nicht: "Nimm das Kantholz zum Nagelreinhauen", sondern rätst zur besten Lösung - Dem Hammer.

    Gonger96 schrieb:

    ...Ein Timer dient dazu Dinge in einem bestimmtent ungefähren Intervall abzufragen, wenn kein Event zur Verfügung ..

    a) Prima.. genau das war gefragt.. "Eine MessageBox soll nach 180 sec erscheinen" Und es war von sec die Rede... also keine Ahnung wie ungenau dein Timer ist, aber meiner ist sekundengenau..
    b) ist ein Event, wenn etwas nach einer bestimmten Zeit passieren soll nun mal das beste, als per polling abzufragen
    c) Es wurde nicht nach einer Zeitmessung gefragt (wie lange dauert was), sondern nach einer Möglichkeit nach 180 etwas auszulösen
    d) Thema ist längst erledigt siehe Posting 9
    wenn das Spiel "DAME/Mühle/Finde die Unterchiede" heist, hat es kein GameLoop :)

    und nebenbei, ist ein Event-gesteuerter Timer theoetisch sogar genauer als wenn ich per LOOP/Schleife dauernd die Stoppwatch abfrage.
    Innerhalb dieses Loops kann praktisch jeder thread/Prozess zwischenfunken und sich zeit klauen bis der Loop wieder fortgeführt wird.

    Kinnasch....ist doch gut.... Thema ist doch längst erledigt.
    Nein, eine StopWatch ist genauer. In anderen Sprachen gibts sogar noch Clocks mit Nanosekunden-Auflösung. Die ticken unabhängig vom Thread. Wenn du es unterlassen würdest bessere Lösungen zu unterdrücken, wären wir auch schon fertig. Eine StopWatch ist zur Zeitmessung da, also wird die auch genommen. Fertig.
    ok einen noch... aber dann ist Schluss.. weil das Thema erledigt ist.

    NATÜLICH ist eine Stopwatch genauer.. ts ts ts (wobei bei den 3 min die der TE im Auge hatte ein paar ms wohl keine Rolle spielt, sonst hätte er sich erneut gemeldet.

    Das Problem ist nicht die Genauigkeit der StopUhr, sondern den Zeitpunkt der Abfrage... wenn innerhalb des Loops.. ein Thread dazwischenfunkt, der das System eine weile blockiert,
    findet auch die Abfrage später/verzögert statt.. wo u.U. die Zeit schon lange vorbei ist = ungenau!
    Und nachwievor ist Polling, das X-Fache ausführen von unnötigen Code, nicht gerade eine sehr gute Lösung.

    Aus die Maus