While-schleife Programmieren ?

  • Hallo Zusammen
    Ich möchte gerne eine Schleife Programmieren die mir eine
    Laufwerksverbindung erstellt bis dieses Laufwerk existiert.

    Hier mein Script:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

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

    _Connector()
    Func _Connector()

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

    $GUI = GUICreate("Connector v1.0", 300, 100)
    $FileMenu = GUICtrlCreateMenu("&?")
    $fileitem = GUICtrlCreateMenuItem("About", $filemenu)

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

    While 1
    DriveMapAdd("I:", \\1.2.3.4\LaufwerkShare, 0,"Login", "Passwort")
    Sleep(5)
    if FileExists("I:\") then _Info()
    WEnd

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

    Func _Info()
    GUICtrlCreateLabel("Connection made Successful:", 8, 8, 250, 27)
    $Exit = GUICtrlCreateButton("OK", 174, 29, 100, 25)
    Guisetstate()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Fileitem
    MsgBox (0,"","Drive Connector" )
    Case $Exit
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Ich bitte um Unterstützung!
    Danke vielmals
    Mauri

    • Offizieller Beitrag

    DriveMapAdd("I:", \\1.2.3.4\LaufwerkShare, 0,"Login", "Passwort")


    Das gehört vor die Schleife, denn in der Schleife möchtest du ja nur die Anbindung abwarten. Momentan versuchst du alle 5 ms wieder das Laufwerk zu mappen.
    Übrigens ist das Sleep von 5 ms zu niedrig, real wirst du kaum unter 8 ms kommen, egal was du reinschreibst, und so ein hohes Polling ist wenig sinnvoll. Nimm 1/10 s - also 100 ms.

    Weiterhin würde ich einen Zwangsaustritt aus der Warteschleife ermöglichen, falls die Verbindung sich nicht erstellen lässt. Z.B. einen Zähler mit einbauen und nach 10 s ( = 100 Durchläufe ) wird mit Fehlermeldung abgebrochen. Wenn du das nicht einbaust, kannst du in einer Endlosschleife gefangen bleiben.

  • Hallo BugFix
    Danke der schellen Antwort!, doch bitte wie baue ich diesen Zähler korrekt ein ?
    momentan lauft mir dieses ding wie du es sagst endlos und lässt sich fast nicht mehr abbrechen.

    [/spoiler]

  • Hi,
    wenn sowieso nur eine bestimmte Anzahl Schleifendurchläufe benötigt werden, dann nimmt man FOR/TO

    [autoit]


    $a=DriveMapAdd("I:", '\\1.2.3.4\LaufwerkShare', 0, "Login", "Passwort")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @crlf & '>Error code: ' & @error & @crlf & @extended & @crlf) ;### Debug Console

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

    $x = 10 ; es soll 10 mal durchlaufen
    $gemapped="nicht "
    For $i=1 To $x
    Sleep(100) ;wartet 100 Millisekunden
    If FileExists("I:\") Then
    _Info() ;info ausgeben
    $gemapped=""
    ExitLoop;raus aus schleife
    EndIf
    Next

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

    Msgbox(0,0,"Laufwerk wurde "&$gemapped& "gemapped!")

    [/autoit]

    Wobei ich ERST abfragen würde, ob das LW existiert, und DANN versuchen zu mappen.
    So spart man sich diese völlig überflüssige Schleife komplett!
    DriveMapAdd gibt nämlich, wie übrigens so gut wie alle anderen AutoIt-Funktionen, einen Fehlercode zurück, den man tunlichst dann bearbeitet!
    Hilfe lesen bildet!