Zeiten laufen unterschiedlich

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von AliveDevil.

    Zeiten laufen unterschiedlich

    Hi Com ich bins mal wieder :S

    Ich habe ein mir absolut unverständliches Problem ,das wie folgt lautet:

    Ich gebe in einem Label die Systemzeit aus und in einem anderem die Zeit seid meinem Start.


    Theoretisch sollen beide gleichschnell laufen (läuft auch beides über den gleichen timer) aber irgendwie ist das label mit der Systemzeit nach ein paar sekunden 1 sekunde im vorsprung (später dann 2 , 3 usw) , da beides im gleichen timer läuft sollte es doch auch beides gleichschnell laufen oder irre ich mich da ?

    Wäre über hilfe sehr erfreut da ich echt keine ahnung mehr habe was ich noch machen soll ?(

    Hier der Code:

    Quellcode

    1. Private Sub systemzeit() Handles timer2.Tick
    2. Dim Zeit As String = Date.Now.AddSeconds(klickzeit).ToLongTimeString()
    3. Label8.Text = startzeit
    4. If Label8.Text = lblSystemzeit.Text And q = 1 Then
    5. starten = 1
    6. Label1.Text = lblZeit.Text
    7. intZeit2 = intZeit
    8. startzeitt = Date.Now.ToLongTimeString
    9. lblStartzeit.Text = startzeitt
    10. If startbutton = 1 Then
    11. array()
    12. wenngestartet()
    13. startbutton += 1
    14. End If
    15. k = 1
    16. Label1.Text = ""
    17. q += 1
    18. Me.btnStartstop.Text = "Split"
    19. Exit Sub
    20. End If
    21. If starten = 1 Then
    22. aktuelleZeit += 1
    23. intZeit += 1
    24. If aktuelleZeit >= 60 Then
    25. Me.aktuelleZeit = Me.aktuelleZeit - 60
    26. minuten += 1
    27. End If
    28. If minuten < 10 Then
    29. If aktuelleZeit < 10 Then
    30. labelzeit = "0" & minuten & ":" & "0" & aktuelleZeit
    31. Else
    32. labelzeit = "0" & minuten & ":" & aktuelleZeit
    33. End If
    34. Else
    35. If aktuelleZeit < 10 Then
    36. labelzeit = minuten & ":" & "0" & aktuelleZeit
    37. Else
    38. labelzeit = minuten & ":" & aktuelleZeit
    39. End If
    40. End If
    41. End If
    42. lblSystemzeit.Text = Zeit
    43. lblZeit.Text = labelzeit
    44. End Sub


    intervall ist 1000 was ja auch eine sekunde ist ... bin echt überfragt :wacko:
    Ich steige da überhaupt nicht durch.
    Du hast:
    -Zeit
    -startzeit
    -startzeitt
    -intZeit
    -intZeit2
    -aktuelleZeit
    -labelzeit
    -Label8
    -Label1
    -lblStartzeit
    -lblSystemzeit
    -lblZeit
    -q
    -k
    -startbutton (der als Zahl behandelt wird)
    -minuten
    -starten


    Und das für paar Zeilen Code...
    ja das ist alles später wichtig mein gesammtes programm hat über 2000 zeilen code aber da es hier nur um die zeit geht hab ich den rest der übersicht halber rausgelassen...

    werde nochmal alles aus dem code rausnehmen was für das problem unerheblich ist:

    Quellcode

    1. Private Sub systemzeit() Handles timer2.Tick
    2. Dim Zeit As String = Date.Now.AddSeconds(klickzeit).ToLongTimeString()
    3. Label8.Text = startzeit
    4. If starten = 1 Then
    5. aktuelleZeit += 1
    6. If aktuelleZeit >= 60 Then
    7. Me.aktuelleZeit = Me.aktuelleZeit - 60
    8. minuten += 1
    9. End If
    10. If minuten < 10 Then
    11. If aktuelleZeit < 10 Then
    12. labelzeit = "0" & minuten & ":" & "0" & aktuelleZeit
    13. Else
    14. labelzeit = "0" & minuten & ":" & aktuelleZeit
    15. End If
    16. Else
    17. If aktuelleZeit < 10 Then
    18. labelzeit = minuten & ":" & "0" & aktuelleZeit
    19. Else
    20. labelzeit = minuten & ":" & aktuelleZeit
    21. End If
    22. End If
    23. End If
    24. lblSystemzeit.Text = Zeit
    25. lblZeit.Text = labelzeit
    26. End Sub


    so ich hoffe jetzt ists einigermaßen übersichtlich?

    VB.NET-Quellcode

    1. Private Sub systemzeit() Handles timer2.Tick
    2. Dim Zeit As String = Date.Now.AddSeconds(klickzeit).ToLongTimeString()
    3. If starten = 1 Then
    4. aktuelleZeit += 1
    5. intZeit += 1
    6. If aktuelleZeit >= 60 Then
    7. Me.aktuelleZeit = Me.aktuelleZeit - 60
    8. minuten += 1
    9. End If
    10. If minuten < 10 Then
    11. If aktuelleZeit < 10 Then
    12. labelzeit = "0" & minuten & ":" & "0" & aktuelleZeit
    13. Else
    14. labelzeit = "0" & minuten & ":" & aktuelleZeit
    15. End If
    16. Else
    17. If aktuelleZeit < 10 Then
    18. labelzeit = minuten & ":" & "0" & aktuelleZeit
    19. Else
    20. labelzeit = minuten & ":" & aktuelleZeit
    21. End If
    22. End If
    23. End If
    24. lblSystemzeit.Text = Zeit
    25. lblZeit.Text = labelzeit



    ich möchte in dem label lblSystemzeit die Systemzeit ausgeben die ich ändern kann daher hab ich bei "Zeit" auch Date.Now.AddSeconds(klickzeit).ToLongTimeString() drin statt Date.Now.ToLongTimeString()
    das funktioniert auch gut.
    In dem label lblZeit möchte ich die Zeitspanne seid(t?) dem start ausgeben also wenn ich um 09:30:00 starte sollte um 09:30:30 in dem lblZeit 00:30 stehen , stattdessen steht da derzeit 00:28 oder 00:29 , wird was mit der laufzeit zu tun haben denke ich? aber wie ich das behebe weiß ich leider nicht
    die sehe ich dann beim wettkampf , daher kann ich dann im nachhinein die zeit dahingehend verändern

    wenn ich also zum wettkampf komme und die offizielle wettkampfzeit 11:00:00 ist , meine systemzeit aber 10:59:45 ist dann ändere ich die systemzeit dementsprechend.

    Aber was hat das mit dem Problem zu tun?
    Timer sind nicht high-precision. Am besten nimmst du dir ne Stopwatch und startest die bei Klick auf den Button. Gleichzeitig kannst du natürlich einen Timer nehmen, der dir die aktuelle Zeit der Stopwatch ausgibt.
    Alles andere, was es an Lösungen dafür gibt, ist mMn unsauber, nicht genau oder vollkommen daneben.
    Eine andere Möglichkeit wäre, dass du dir die Start-Zeit merkst und von der aktuellen Zeit subtrahierst - die Zeitspanne seit dem Start ist dieselbe!
    05:00:05 gestartet und 05:01:00 beendet, sind 55 Sekunden.
    05:00:00 gestartet und 05:00:55 beendet, sind immernoch 55 Sekunden.
    Die Startzeit und Endzeit haben KEINEN Einfluss auf die Zeitspanne zwischen den Zeitpunkten, da Zeit nunmal linear verläuft.
    hmm dein beitrag war schon irgendwie hilfreich, habe es nun mit ner stopwatch gemacht , allerdings wird auch da irgendwann plötzlich eine differenz von 1 sekunde angezeigt (läuft die ganze zeit absolut parallel und dann plötzlich bei 23 sekunden bleibt die stopwatch quasi 1 sekunde stehen und geht dann weiter wodurch natürlich eine indifferenz vorhanden ist -.-

    hmm jetzt funktioniert es plötzlich ... das akzeptiere ich einfach mal danke sehr :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „M-Jay“ ()

    Glaub ich dir nicht. Es kann doch auch passieren, dass dein Timer nach 23 Sekunden n Schluckauf hat und dann mit x-Millisekunden nachzieht, oder?
    Hast du die Endzeiten verglichen? Auf einen Timer und die Aktualisierungen davon würde ich mich niemals verlassen.