Hallo ich programmiere grade mein ersten bot mit "ImageSearch" und habe das Problem das nach einer weile die Fehlermeldung stack overflow kommt und ich weis nicht wie ich das verhindern soll.
Ich arbeite mit autoit seit 2 Wochen und das ist mein Ergebnis.
Die Funktionen bichos und bicho rufen sich gegenseitig auf. Irgendwann ist dann der Stack voll, weil Zustände, etc. dort abgelegt werden. Alle Rekursionen lassen sich iterativ realisieren. Versuch das mal.
Hallo ich programmiere grade mein ersten bot mit "ImageSearch" und habe das Problem das nach einer weile die Fehlermeldung stack overflow kommt und ich weis nicht wie ich das verhindern soll.
Ich arbeite mit autoit seit 2 Wochen und das ist mein Ergebnis.
Ich hoffe das ihr mir helfen könnt.
Danke.
befolge bitte folgende punkte:
gewöhne dir an mit EINER endlosschleife zu arbeiten.
Bist dir sicher das der code oben von dir ist ? hab nie nen deutschen gesehen der seine variablen nicht deutsch oder english schreibt und in die ini auch
Bist dir sicher das der code oben von dir ist ? hab nie nen deutschen gesehen der seine variablen nicht deutsch oder english schreibt und in die ini auch
Ja der code ist von mir un diese Sprache ist Spanisch den denn ich habe lange zeit in Spanien gelebt.
bei der ini gebe ich zu, da habe ich mir den code zusame geklaut!
Quote:
Originally Posted by qkuh
Die Funktionen bichos und bicho rufen sich gegenseitig auf. Irgendwann ist dann der Stack voll, weil Zustände, etc. dort abgelegt werden. Alle Rekursionen lassen sich iterativ realisieren. Versuch das mal.
wie kann ich das machen, kannst du das für ein anfänger erklären?
danke.
Quote:
Originally Posted by lolkop
befolge bitte folgende punkte:
gewöhne dir an mit EINER endlosschleife zu arbeiten.
versuche immer rekursion zu vermeiden
allgemeiner script aufbau:
<includes>
<hotkeys>
<variablen>
<guis>
<hauptschleife>
<funktionsdeklarationen>
Wie soll ich eine rekursion vermeiden wenn der wert immer wieder überpruft werden soll? kannst du mir dabei helfen?
die funktionen rufen sich nach und nach immer weiter gegenseitig auf und werden so im stack aufgestapelt... da nie das ende einer funktion erreicht werden kann, wird der stack auch entsprechend nie wieder abgebaut und wächst bis es schließlich zum überlauf kommt...
um das problem zu beheben, kann man sie einfach direkt nacheinander in einer schleife abarbeiten:
Jede funktion wird beim aufruf auf den stack geladen und beim erreichen des ausstiegspunktes (Return oder EndFunc) wieder vom stack entfernt. folglich kann es nichtmehr zu einem stack überlauf kommen...
Edit:
das gleiche passiert im übrigen auch hier:
Code:
HotKeySet(<hotkey1>, 'a')
HotKeySet(<hotkey2>, 'b')
While True
WEnd
Func a()
While True
[...]
WEnd
EndFunc
Func b()
While True
[...]
WEnd
EndFunc
da der aufruf einer neuen funktion manuell ausgeführt wird (über hotkeys), dauert es entsprechend länger, bis der stacküberlauf sich ereignet. beim drücken des hotkeys wird eine neue funktion auf den stack gepackt, ohne das die alte funktion gelöscht werden kann (da sie nie einen ausstiegspunkt erreicht). deshalb darf eine pause funktion niemals so aufgebaut sein:
Code:
HotKeySet(<hotkey>, "pause")
While True
[...]
WEnd
Func pause()
While True
[...]
WEnd
EndFunc
letztendich wird auch hierdurch nach einer laufzeit x immer ein stack overflow auftauchen.
stattdessen arbeitet man mit zuständen:
Code:
HotKeySet(<hotkey>, "pause")
Global $pause
While True
If Not $pause Then
[...]
EndIf
WEnd
Func pause()
If $pause Then
$pause = False
Else
$pause = True
EndIf
EndFunc
oder einfacher:
Code:
HotKeySet(<hotkey>, "pause")
Global $pause
While True
If Not $pause Then
[...]
EndIf
WEnd
Func pause()
$pause = Not $pause
EndFunc
die funktionen rufen sich nach und nach immer weiter gegenseitig auf und werden so im stack aufgestapelt... da nie das ende einer funktion erreicht
...
Danke für die super Erklärung ich werde mal das alles berücksichtigen und hoffen das ich alles richtig mache , melde mich dann wenn ich fertig bin und vielen vielen dank.
Voten für Deutsches Stack Overflow 02/14/2013 - Web Development - 2 Replies Die meisten bzw. viele von euch kennen sicher das Stack Overflow. Es gibt (schon sehr lange) eine möglichkeit zum Voten für ein Deutsches (: Wäre natürlich sehr schick wenn diese in die Beta kommt. Dafür braucht man aber viele Unterstützer. Also Votet (Committen auf der linken seite) (x
Stack Overflow (in German) - Area 51 - Stack Exchange
Recursion level has been exceeded - AutoIt will quit to prevent stack overflow. 01/20/2013 - AutoIt - 4 Replies Hallo Leute,
ich hab das folgende Problem mit meinem Bot:
Nach ca. 4-5 Std. Laufzeit meines Bots bekomme ich folgende Meldung...
"Recursion level has been exceeded - AutoIt will quit to prevent stack overflow."
Das ganze an völlig unterschiedlichen Stellen, es ist also wirklich die Addition die das Problem hervorruft und nicht eine bestimmte Funktion etc.
Koopa's Discount-Offer:Ectos 13,99€/stack! Lpicks 3,99/stack! 04/04/2012 - Guild Wars Trading - 0 Replies Hey ;)
My special offer until monday or sold-out. Enjoy :)
Ectos in stock:
10 Stacks http://gwah.onlinewelten.com/images/Ektoplasmakuge l.png
8 stacks sold
1 Stack = 13,99€
Koopas Special -> Ektos für 15/€ Stack -- Dietriche 4,99€/Stack 04/03/2012 - Guild Wars Trading - 1 Replies Servus ;)
Ich biete euch hier die einmalige Gelegenheit, Ektos und Dietriche zu einem sehr günstigen Preis zu kaufen.
Ektos auf Lager:
15 Stacks http://gwah.onlinewelten.com/images/Ektoplasmakuge l.png
1 Stack = 15,00€