Statische Variablen und AdlibRegister. Bug oder normales Verhalten?

  • Moin!

    Wie der Titel schon sagt, habe ich ein Problem mit statischen Variablen, wenn eine Funktion von AdlibRegister aufgerufen wird.
    Bei "normalem" Aufruf, verhält sich Static wie erwartet: Beim ersten Durchlauf wird die Variable initialisiert und erhält einen Wert. Danach wird die Initialisierung ignoriert und die Variable erhält und behält den Wert, der ihr innerhalb der Funktion zugewiesen wird.
    Im Klartext (siehe Beispiel): Der Wert beim ersten Durchlauf ist 1, danach immer 0.
    Wird die Funktion danach durch AdlibRegister aufgerufen, erfolgt offensichtlich erneut die Initialisierung und der Wert wird wieder auf 1 gesetzt. Im nächsten Durchlauf ist dann wieder alles so wie es sollte...
    Im Umgekehrten Fall verhält es sich genauso: AdlibRegister zuerst und dann "normaler" Aufruf veranlasst ebenfalls eine erneute Initialisierung.

    *Edit*
    Ich umgehe das Problem jetzt einfach, indem ich Timer verwende. Gefällt mir sogar besser so :thumbup:
    Aber die Frage bleibt, ob das Beschriebene ein Bug ist...


    Beispiel:

    [autoit]

    ConsoleWrite("Zuerst normaler Aufruf, dann AdlibRegister:" &@CRLF)
    _StaticTest1()
    _StaticTest1()
    _StaticTest1()
    AdlibRegister("_StaticTest1", 1000)
    Sleep(5000)
    AdlibUnRegister("_StaticTest1")
    ConsoleWrite(@CRLF & "Zuerst AdlibRegister, dann normaler Aufruf:" &@CRLF)
    AdlibRegister("_StaticTest2", 1000)
    Sleep(5000)
    AdlibUnRegister("_StaticTest2")
    _StaticTest2()
    _StaticTest2()
    _StaticTest2()

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

    Func _StaticTest1()
    Local Static $iStatic = 1
    ConsoleWrite("$iStaic1: " & $iStatic & @CRLF)
    $iStatic = 0
    EndFunc

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

    Func _StaticTest2()
    Local Static $iStatic = 1
    ConsoleWrite("$iStaic1: " & $iStatic & @CRLF)
    $iStatic = 0
    EndFunc

    [/autoit]


    Das kann doch kein erwünschtes Verhalten sein, oder doch?


    Sanfte Grüße :D

  • Dein Skript gibt mir folgende Ausgabe:

    Ausgabe

    Ich kann da kein merkwürdiges Verhalten erkennen.
    Die statische Variable wird nur einmal initialisiert - egal ob die Funktion direkt aufgerufen wird oder über Adlib.

  • Hi!

    Welche AutoIt Version benutzt du?

    Bei mir sieht die Ausgabe mit ver. 3.3.8.1. so aus:

    Spoiler anzeigen

    Die zweite 1 kommt jeweils, wenn sich die Aufrufmethode ändert.

    *Edit*
    Mit meiner installierten Beta (3.3.9.22.) ist die Ausgabe identisch...