Hängendes AutoIt Script

  • Hallo Leute,

    ich hab ein kleines Problem mit einem Script. Ich hab im Internet schon recherchiert und bin zu keiner Lösung gekommen.

    Ich hab mir ein Pinger zusammen gebastelt. Ich geben in den Input eine IP-ADRESSE ein. Wenn die Ip Adresse pingbar ist, leuchtet das Kästchen daneben grün, wenn sie nicht pingbar ist rot. Soweit alles gut :) .

    Jetzt zu meinem Problem:

    Wenn die Ip-Adresse pingbar ist und somit das Kästchen grün wird, ist alles in Ordnung. Aber sobald ich eine falsche Ip eintippe die nicht vorhanden ist, braucht mein Script sehr lange bist das Kästchen rot wird.

    Kann es evtl. daran liegen das mein Script fast 500 Zeilen hat ?:(

    Vielen Dank

    EhrenBrudi

  • Ich hoffe deine 500 Zeilen sind nicht nur für das oben beschriebene "Problem".

    Aber ohne Code, ist Hilfe nahezu unmöglich. :Glaskugel:

    Leider doch, es sind 6 Geräte die angepingt werden müssen. Ich hab 4 Inputs das heißt : 4 eingebbare Inputs mit jeweils 6 Geräte die angepinnt werden. Ich werde mein Code reinschicken, müsste aber etwas umändern, weil ich die Informationen die drin stehen nicht preisgeben darf.

  • Dann braucht wirklich dein Skript.
    Der Idealfall wäre ein Minimalskript.
    Also ein möglichst kleines Skript was das beschriebene Verhalten reproduziert und alles andere was nichts mit dem Fehler zu tun hat entfernt hat (z.B. die GUI und derartiges könnte hier wahrscheinlich raus).

    Der Vorteil für dich: Bei der Erstellung eines solchen Minimalskriptes grenzt du selbst automatisch die Ursache schrittweise ein und die Wahrscheinlichkeit ist hoch bereits dabei die Fehlerquelle zu detektieren.

  • Leider doch, es sind 6 Geräte die angepingt werden müssen. Ich hab 4 Inputs das heißt : 4 eingebbare Inputs mit jeweils 6 Geräte die angepinnt werden. Ich werde mein Code reinschicken, müsste aber etwas umändern, weil ich die Informationen die drin stehen nicht preisgeben darf.

    Ouch, ich wittere Optimierungsbedarf ;)

  • Falls es dir das ganze leichter macht, hier ein Beispiel wie ich dies (für 4 IP's) umsetzen würde (nicht komplett optimiert, da ich es zumindest ein wenig verständlich halten wollte).

    Achtung: Anzahl der Eingabefelder = Anzahl der späteren IP's = Anzahl der Punkte

    Im Test lief dies ziemlich fix.

    Einmal editiert, zuletzt von Moombas (30. März 2023 um 10:24)

  • Kurz zur Erklärung des Codes:

    Ich gebe eine vierstellige Zahl ein die bei allen Geräten die selbe Netzwerkadresse haben , aber je nach Gerät andere Hostadressen. Wenn ich jetzt in den Input die Zahl 9040 eintippe (Online Gerät) wird es grün, wenn ich 9999 eintippe (offline Gerät) dauert das eine Weile und wird dann rot.

    Ich hoffe ich konnte mich ausdrücken :)

    Einmal editiert, zuletzt von EhrenBrudi (30. März 2023 um 12:10)

  • Dann braucht wirklich dein Skript.
    Der Idealfall wäre ein Minimalskript.
    Also ein möglichst kleines Skript was das beschriebene Verhalten reproduziert und alles andere was nichts mit dem Fehler zu tun hat entfernt hat (z.B. die GUI und derartiges könnte hier wahrscheinlich raus).

    Der Vorteil für dich: Bei der Erstellung eines solchen Minimalskriptes grenzt du selbst automatisch die Ursache schrittweise ein und die Wahrscheinlichkeit ist hoch bereits dabei die Fehlerquelle zu detektieren.

    Ich hab auch alles was jetzt nicht so nötig war herausgenommen, ist aber leider genauso:(

  • So, ich denke es hat vorher bei dir 28 und nicht 26 Sekunden gedauert (4000ms je ping * 7 Geräte = 28). Womit die Theorie von AspirinJunkie bestätigt wäre.

    Ich habe deinen Code in einem ersten Step etwas zusammen gestaucht (da istmit Arrays etc. definitv noch viel drin das ganze zu vereinfachen), den Ping mal auf 1 Sekunde reduziert, Einrückungen korrigiert und Local/Global korrigiert/ergänzt. Da es hier scheinbar nur um lokale Geräte geht, müsste 1 Sekunde reichen.

    Zusätzlich die GUI-Schleife korrigiert und der ping Funktion noch das Rücksetzen des Inputfeldes hinzugefügt.

    2 Mal editiert, zuletzt von Moombas (30. März 2023 um 13:19)

  • So, hier der optimierte und korrigierte Code (jemand anders kann hier sicherlich noch weiter optimieren aber mir pers. würde es reichen :)) EhrenBrudi

    Da dein Problem nur an Anzahl der Geräte * timeout lag, ist dahingehend keine weitere optimierung möglich.

    Edit: Ich war mal so frei, bei jedem Ping noch den Titel deines Fensters zu ändern, dann sieht man auch, das er noch arbeitet. Ist nur ein kleiner Vorschlag, kannst du ggf. auch wieder raus nehmen.

    8 Mal editiert, zuletzt von Moombas (31. März 2023 um 10:17)

  • Ich hab jetzt ein Remix aus deinem und meinem Script gemacht😂 das läuft jetzt echt gut.

    Das ist jetzt wie beim letzten Thema, wenn man im Nachhinein sieht wie das korrekt ausschaut ,denkt man sich „das hätte ich mir selber denken können“.

    Aber ich glaube mein Hauptproblem ist eher die Recherche. Wie du gesagt hast ich muss lernen im Code zu denken. Ich suche immer nach dem falschen Ansatz.

    Aber ich glaube das krieg ich noch hin. Bis dahin muss ich euch leider noch mit meinen kleinen Problemen nerven😂

  • Hi,

    ich hatte das Problem der "langen Antwortzeiten" schon hier auf AutoIt.de im Jahre 2009 angesprochen...

    Nach langer Recherche war die Hauptursache die dynamisch(!) berechnete/festgelegte Wartezeit bei NICHT erreichbaren Services von Windows. In Kombination von Router/Providerseitig gedroppten Antwortpaketen...

    Weiter unten im Thread meine Analyse mit Ethereal, die schnell angeworfene Analyse heute allerdings mit Wireshark wirft annähernd identische Ergebnisse.

    Ich vermute drops der Antwortpakete bei Router/Provider um massive (D)DOS-Angriffe einzubremsen.

    Andy
    12. Januar 2009 um 23:38

    Gelöst habe ich das Problem mittels AdlibRegister, dort springe ich nach 3 Sekunden rein, ist bis dahin keine Antwort da, ist mein Server/Dienst "OFF"

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    2 Mal editiert, zuletzt von Andy (31. März 2023 um 09:51)

  • EhrenBrudi : Freut mich das ich helfen konnte. Beachte bitte das ich (gerade gesehen) als timeout in meinem letzten Beispiel noch die 4000ms drin hatte, diese kannst du, wenn es wirklich nur lokale Systeme sind runter setzen, musst du aber mal testen.

    Zudem vermute ich das du dir vorher eine Schleife gebaut hattest, was dein Script zum hängen gebracht hat. Wenn das Inputfeld 4 chars drin hat (was du vorher nicht geleert hast), macht er deinen test immer wieder (da die Prüfung auf die Anzahl der zeichen im Input immer "true" ergibt) und hängt sich somit weg (Endlosschleife).

    Das habe ich nebenbei bei den "Aufräumarbeiten" behoben aber erst später realisiert.

    Ich hoffe ich habe das ganze für dich noch einigermaßen im Verständlichen gelassen, trotz der Nutzung vieler Arrays zur Kürzung des benötigten Codes.

  • Moin,

    die Adressen 10.nn.nn.140 deuten auf ein lokales Netzwerk hin. Wenn ein Ping in einem lokalen Netz auch nur 1 Sekunde braucht, ist die Welt definitiv nicht in Ordnung. Es ist zweifelhaft, ob man das betreffende Gerät als 'normal erreichbar' (grün) kennzeichnen sollte.

  • Velted : Nicht unbedingt. Per VPN etc. kannst du auch Geräte erreichen, die im entsprechenden (lokalen) Netz sind, sich jedoch physisch in einem anderen Gebäude/Stadt/Land befinden. Da er hier 4 Eingabefelder verwendet und die Strucktur sehr nach mehreren Filialen aussieht, vermute ich stark genau diese Konstellation.

    Und da spielt dann die (lokale) Datenanbindung der Filiale und nocht vieles weitere mit rein, womit du da gerne mal auch ganz andere ping-zeiten erreichen kannst.