While 1 "ich verzweifle" WEnd

  • Hi leute,
    mich macht die While verrückt...

    Versuche ein Script zu schreiben, bei dem Alle 5min nach einem Teilupdate gesucht wird sofern nicht eine Komplettversion downzuloaden ist.
    Gleichzeitig soll aber das TrayMenu funktionieren. Hier mal mein bisheriger code:

    [autoit]


    Func CheckSilent()
    TraySetToolTip('Updater | Suche nach neuen Teilversionen...')
    If $instV=$INSTALLER Then
    While 1
    Switch TrayGetMsg()
    Case $s_hButton
    showhide()
    ContinueLoop
    Case $exitbutton
    oNExit()
    ContinueLoop
    EndSwitch
    TraySetState(4)
    If FileExists($version&".iinst") Then
    If FileGetSize($version&".iinst") <> $getnewsize Then
    TrayTip("Neue Updates verfügbar","Klicken Sie Hier um die neuen Updates zu installieren",30)
    $update=1
    TrayItemSetState($instButton,$TRAY_ENABLE)
    TrayItemSetState($instButton,$TRAY_DEFAULT)
    EndIf
    Else
    TrayTip("Neue Updates verfügbar","Klicken Sie Hier um die neuen Updates zu installieren",30)
    $update=1
    TrayItemSetState($instButton,$TRAY_ENABLE)
    TrayItemSetState($instButton,$TRAY_DEFAULT)
    EndIf
    While Sleep(300000)
    TraySetState(8)
    $timer=TimerInit()
    AdlibEnable("Timer")
    Switch TrayGetMsg()
    Case $s_hButton
    showhide()
    ContinueLoop
    Case $exitbutton
    oNExit()
    ContinueLoop
    EndSwitch
    WEnd
    WEnd
    Else
    TrayTip("Neuigkeiten auf der Webseite",$news,500)
    TrayItemSetState($instButton,$TRAY_ENABLE)
    TrayItemSetState($instButton,$TRAY_DEFAULT)
    While 1
    Switch TrayGetMsg()
    Case $instButton
    ExitLoop
    Case $exitbutton
    oNExit()
    EndSwitch
    WEnd
    _IECreate($UrlInfoAbout)
    TrayTip("Webseite wird geöffnet...","Laden Sie dort die neueste Komplettversion herunter",500)
    Exit
    EndIf
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    CheckSilent()

    [/autoit]

    $Variablen usw sind natürlich alle deklariert und Funktionen('sind auch da') wollt nur nicht den kompletten Code posten.

    Bei dem Code oben Checkt das Programm nur bei der ersten Ausführung danach macht er warscheinlich statt sleep(300000) eher "while 1 sleep() WEnd" oder so 8|
    Ist warscheinlich nur n dummer Flüchtigkeitsfehler denk ich... Steigt da jemand durch?

    Würd mir sehr helfen ;)
    mfg

    Einmal editiert, zuletzt von SetMeAdmin() (16. Mai 2010 um 19:59)

  • du solltest Dir mal in der Hilfe durchlesen, wie While ... WEnd funktioniert.
    in gemeinem deutsch würde ich sagen While (wird ausgeführt, solange das was hier steht "1" zurückgibt)
    Deine erste While-Schleife wird nie verlassen, weil was soll Sleep() außer 1 zurückgeben?
    Kann sein, dass das in der Hilfe nicht so steht, aber grundsätzlich gibt jede Funktion bei Erfolg eine 1 zurück...

    Als Beweis:

    [autoit]

    MsgBox(0, '', Sleep(100))

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • [autoit]

    While Sleep(300000)
    TraySetState(8)
    $timer=TimerInit()
    AdlibEnable("Timer")
    Switch TrayGetMsg()
    Case $s_hButton
    showhide()
    ContinueLoop
    Case $exitbutton
    oNExit()
    ContinueLoop
    EndSwitch
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]

    ist ne Endlosschleife in ner Endlosschleife, macht also keinen Sinn...

    edit: Zu spät ;(

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • du solltest Dir mal in der Hilfe durchlesen, wie While ... WEnd funktioniert.
    in gemeinem deutsch würde ich sagen While (wird ausgeführt, solange das was hier steht "1" zurückgibt)
    Deine erste While-Schleife wird nie verlassen, weil was soll Sleep() außer 1 zurückgeben?
    Kann sein, dass das in der Hilfe nicht so steht, aber grundsätzlich gibt jede Funktion bei Erfolg eine 1 zurück...

    Als Beweis:

    [autoit]

    MsgBox(0, '', Sleep(100))

    [/autoit]

    Wie dumm von mir...
    Gibt es denn eine andere Möglichkeitauf das TrayMenu zu reagieren während er 5 min wartet?

  • [autoit]

    Opt("TrayOnEventMode",1)

    [/autoit]


    So mach ich das immer :D

    Lies dir einfach die Hilfe dazu durch, On-Event-Mode ist meiner Meinung nach viel besser zum Programmieren, da man einzelne Funktionen hat und KEINE Endlosschleife (bis auf eine in der Sleep(100) drinnensteht damit sich das Skript nicht beendet + Prozessor geschont wird)

    Tipp:

    [autoit]

    Opt("GuiOnEventMode",1)

    [/autoit]

    gibts auch noch :D

  • Ja bin auch Event-Fan, hatte ich auch vorher so bis in folgendem Code das TrayMenu nicht mehr funzte:

    [autoit]


    While @InetGetActive
    $Prozent = @InetGetBytesRead * 100 / $getnewsize
    $Prozentrounded = Round($Prozent)
    GUICtrlSetData($Progress1,$Prozent)
    GUICtrlSetData($Label1,"Download: "&$Prozentrounded&"%")
    GUICtrlSetData($Label2,$Prozentrounded & "% " & "(" & @InetGetBytesRead & ") Bytes von " & $getnewsize & " Bytes heruntergeladen.")
    Sleep(250)
    WEnd

    [/autoit]


    Ich wollte nämlich, dass der Installationsstatus(GUI) ausgeblendet und eingeblendet werden kann (for example Windows Update).
    Das funzt jetzt alles (mit viel gedult weil ich das MsgSwitch in die obige Schleife mit reingelegt hab)
    Heisst soviel wie "Nach dem Klick auf Status anzeigen trinken Sie bitte einen Kaffee bis das GUI erscheint".
    Also auch nicht so die Wahre Lösung.. :(

  • Wo ist denn in dem Code was mit Traymenü??? Übrigens gibt es die Inet-Makros nicht mehr, die da stehen. Dafür gibts jetzt InetGetInfo.

  • ja nirgens... ist ja auch nur ein Teilcode! Aber er müsste ja bei TrayEventMode während der Schleife trotzdem das traymenü aktiv halten oder nicht?
    Ab welcher Version wurde denn @InetGetBytesRead abgeschafft? kann sein dass ich mit meinem Compiler nicht auf dem neuesten Stand bin aber die Schleife Oben funzt einwandfrei. :S