Problem mit Timer

  • VB6

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von VBLukas.

    Problem mit Timer

    Hey Leute.
    ich hab da nen Problem mit meinem Programm, das den Computer eigentlich um eine bestimmte Uhrzeit herunterfahren sollte es gin bei den Tests aber jetz plötzlich nicht mehr.

    Private Sub Command1_Click()


    Dim sekunden, Minuten, Stunden, Tage As Variant

    Minuten = txtminuten.Text
    Tage = txtTag.Text
    Stunden = txtStunde.Text

    If Minuten = "Minuten" Or Minuten = "" Then
    Minuten = 0
    End If

    If Stunden = "Stunden" Or Stunden = "" Then
    Stunden = 0
    End If

    If Tage = "Tage" Or Tage = "" Then
    Tage = 0
    End If


    sekunden = Tage * 24 * 60 * 60 + Stunden * 60 * 60 + Minuten * 60
    txtUmgewandelt.Text = sekunden
    End Sub

    Private Sub Command2_Click()
    Label1.Caption = Time
    End Sub

    Private Sub Timer1_Timer()
    Label1.Caption = Time
    End Sub

    Private Sub Timer2_Timer()
    If Label1.Caption = "21:20:00" Or Label1.Caption = "21:30:00" Then
    Shell ("shutdown.exe -s -t 600 -c ""Du hast noch 10 Minuten. Mach schnell!""")
    End If
    End Sub


    Es soll auch Minuten, Stunden und Tage umrechnen in sekunden
    jaa kann sein aber ein erfahrener programmierer (schon 30 jahre programmiererfahrun) hat gemeint als Variant wär besser ka Bin zimicher anfänger außerdem is mein problem mit dem


    Private Sub Command2_Click()
    Label1.Caption = Time
    End Sub

    Private Sub Timer1_Timer()
    Label1.Caption = Time
    End Sub

    Private Sub Timer2_Timer()
    If Label1.Caption = "21:20:00" Or Label1.Caption = "21:30:00" Then
    Shell ("shutdown.exe -s -t 600 -c ""Du hast noch 10 Minuten. Mach schnell!""")
    End If
    End Sub

    das was ich meinte das mit dem rchnen klappt gut
    Nun so erfahren kann er dann nicht sein *g* oder hat es Jahrelang falsch gemacht. Varian ist sowas wie heute Object, heißt die Variable kann JEDEN Datentyp aufnehmen, was jedoch nicht gerade praktisch ist. Wenn man mit einer Variable Rechnen will dann sollte sie auch sicher einen Zahlenwert enthalten, oder was meinst du? Kannst du einen String mit einer Zahl multiplizieren??

    Quellcode

    1. "Hallo Welt" * 42


    Logisch dass das irgendwie nicht klappen kann. Leider ist die IDE so "schlau" dass sie automatisch erkennt das gerechnet werden soll und somit die Strings in Integer umwandelt und der leihe somit keinen Unterschied merkt, jedoch wird er irgendwann an einen Punkt kommen wo es nicht mehr funktioniert und dann weiß er nicht woran es liegt.

    Zu deinem Code, also irgendwie werde ich dadruch nicht Schlau. Im Button 1 rechnest du Sekunden aus und packst diese in eine Textbox. Im Timer 1 weißt du dem Label1 die aktuelle Zeit zu, im Timer 2 prüfst du ob die Zeit im Label einer bestimmten Zeit entspricht. Wieso hast du nun vorher die Sekunden ausgerechnet? Und wieso 2 Timer??

    Also ich habe gerade kein VB6 hier, deswegen musste ich bischel im Netz suchen, aber glaube das dürfte funktionieren

    Visual Basic-Quellcode

    1. Private Sub Timer1_Timer()
    2. Dim sCurrentTime As String
    3. sCurrentTime = Format$(Now, "h:mm:ss")
    4. Label1.Caption = sCurrentTime
    5. If sCurrentTime = "21:20:00" Or sCurrentTime = "21:30:00" Then
    6. Timer.Enabled = False
    7. Shell ("shutdown.exe -s -t 600 -c ""Du hast noch 10 Minuten. Mach schnell!""")
    8. End Sub


    Siehe da, nur noch ein Timer, die richtige Zeitangabe via Format.
    Aber wieso du das Or in der Bedingung hast will mir nicht klar werden, die zweite Bedingung wird doch niemals eintreten weil 21:30 NACH 21:20 kommt? Außer das Programm wird um 21:20:01 gestartet.
    Zudem ist es ratsam den Timer beim Eintritt des Ereignisses auszuschalten, weil ansonsten einige Male der Shutdown befehl kommt, weil der Timer ggf. öfters in der Sekunde ausgelöst wird und somit ist eine ganze weile 21:20:00.
    wie wärs mit nem anderen Thread?

    Visual Basic-Quellcode

    1. Dim test As New Threading.Thread(Address Of testen)
    2. test.start()
    3. Sub testen()
    4. Dim stop As Boolean = false
    5. Dim sCurrentTime As String = ""
    6. Do
    7. sCurrentTime = Format$(Now, "h:mm:ss")
    8. Label1.Text = sCurrentTime
    9. If sCurrentTime = "21:20:00" Or sCurrentTime = "21:30:00" Then
    10. Process.Start("shutdown.exe -s -t 600 -c ""Du hast noch 10 Minuten. Mach schnell!""")
    11. stop = true
    12. Loop Until stop
    13. End Sub

    Dodo schrieb:

    Nun so erfahren kann er dann nicht sein *g* oder hat es Jahrelang falsch gemacht. Varian ist sowas wie heute Object, heißt die Variable kann JEDEN Datentyp aufnehmen, was jedoch nicht gerade praktisch ist. Wenn man mit einer Variable Rechnen will dann sollte sie auch sicher einen Zahlenwert enthalten, oder was meinst du? Kannst du einen String mit einer Zahl multiplizieren??

    Quellcode

    1. "Hallo Welt" * 42


    Logisch dass das irgendwie nicht klappen kann. Leider ist die IDE so "schlau" dass sie automatisch erkennt das gerechnet werden soll und somit die Strings in Integer umwandelt und der leihe somit keinen Unterschied merkt, jedoch wird er irgendwann an einen Punkt kommen wo es nicht mehr funktioniert und dann weiß er nicht woran es liegt.

    Zu deinem Code, also irgendwie werde ich dadruch nicht Schlau. Im Button 1 rechnest du Sekunden aus und packst diese in eine Textbox. Im Timer 1 weißt du dem Label1 die aktuelle Zeit zu, im Timer 2 prüfst du ob die Zeit im Label einer bestimmten Zeit entspricht. Wieso hast du nun vorher die Sekunden ausgerechnet? Und wieso 2 Timer??

    Also ich habe gerade kein VB6 hier, deswegen musste ich bischel im Netz suchen, aber glaube das dürfte funktionieren

    Visual Basic-Quellcode

    1. Private Sub Timer1_Timer()
    2. Dim sCurrentTime As String
    3. sCurrentTime = Format$(Now, "h:mm:ss")
    4. Label1.Caption = sCurrentTime
    5. If sCurrentTime = "21:20:00" Or sCurrentTime = "21:30:00" Then
    6. Timer.Enabled = False
    7. Shell ("shutdown.exe -s -t 600 -c ""Du hast noch 10 Minuten. Mach schnell!""")
    8. End Sub


    Siehe da, nur noch ein Timer, die richtige Zeitangabe via Format.
    Aber wieso du das Or in der Bedingung hast will mir nicht klar werden, die zweite Bedingung wird doch niemals eintreten weil 21:30 NACH 21:20 kommt? Außer das Programm wird um 21:20:01 gestartet.
    Zudem ist es ratsam den Timer beim Eintritt des Ereignisses auszuschalten, weil ansonsten einige Male der Shutdown befehl kommt, weil der Timer ggf. öfters in der Sekunde ausgelöst wird und somit ist eine ganze weile 21:20:00.



    jaa es funktionirt aber trotzdem nich trotzden thx

    (er is programmierer von beruf)

    Johannes.schiller schrieb:

    er is programmierer von beruf

    erfahrener programmierer (schon 30 jahre programmiererfahrun) hat gemeint als Variant wär besser

    Dann bestell ihm mal nen schönen Gruß von mir und sag ihm er soll einem leichtgläubigen Menschen nicht so'n Mist erzählen ...

    Hat der dir auch erzählt, du mögest VB6 verwenden, obwohl das mit .Net alles viel "hübscher" ist?

    Mach in das If (richtige Zeit) mal ne MsgBox mit rein. Kommt die zur richtigen Zeit? Welches Interval hat dein Timer? Und warum nimmst du nicht VB.Net?
    Also bei mir funktioniert der Code einwandfrei.

    Visual Basic-Quellcode

    1. Private Sub Timer1_Timer()
    2. Dim sCurrentTime As String
    3. sCurrentTime = Format$(Now, "h:mm:ss")
    4. Label1.Caption = sCurrentTime
    5. If sCurrentTime = "17:33:00" Then
    6. Timer1.Enabled = False
    7. MsgBox("Zeit erreicht!")
    8. End If
    9. End Sub


    Timer Interval = 100ms
    If sCurrentTime = "21:20:00" Or sCurrentTime = "21:30:00" Then
    Process.Start("shutdown.exe -s -t 600 -c ""Du hast noch 10 Minuten. Mach schnell!""")

    Virus oder Fungame?... :rolleyes:
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.