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
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()
Func _StaticTest1()
Local Static $iStatic = 1
ConsoleWrite("$iStaic1: " & $iStatic & @CRLF)
$iStatic = 0
EndFunc
Func _StaticTest2()
Local Static $iStatic = 1
ConsoleWrite("$iStaic1: " & $iStatic & @CRLF)
$iStatic = 0
EndFunc
Das kann doch kein erwünschtes Verhalten sein, oder doch?
Sanfte Grüße