problema con stack overflow- como reescribir esta secuencia

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
hectorin
Mensajes: 3
Registrado: 29 May 2014, 12:13

problema con stack overflow- como reescribir esta secuencia

Mensaje por hectorin »

Hola tengo una funcion que me provoca stack over flow al cabo de unas horas y me gusatria reescribirla para que no lo provocara. Alguna idea?

Func Palante()
if $pala < 10 Then
$pala += 1
sleep(1000)
$resum = PixelSearch(688,79, 700, 87, 0x551771,3)
If Not @error Then
call ("andando")
Else
call ("Palante")
EndIf
Else
Print ("Mas de 10 secs reiniciando ")

call ("reinicio")
EndIf
EndFunc

kiero ke vaya buscando un determinado color en un cuadrito d la pantalla y ke kuando lo encuentre haga la funcion andando sino lo encuentra en 10 segundos kiero ke reinicie todo el script , lo ke pasa es ke a veces ese color tarda mas tiempo y aveces menos en salir, pero como mucho tarda 10 secs o no sale y no kiero esperar los 10 secs, kiero ke al segundo de aparecer haga la funcion andando


alguna idea de como reescribirlo

mis conocimientos son muy basicos

muchas gracias
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: problema con stack overflow- como reescribir esta secuen

Mensaje por Dany »

Puedes esperar hasta que aparezca haciendo algo como esto.


Do
Sleep(1000)
$resum = PixelSearch(688,79, 700, 87, 0x551771,3)
until @error=0


saludos
  • ............................................Imagen
    ......................................Imagen
hectorin
Mensajes: 3
Registrado: 29 May 2014, 12:13

Re: problema con stack overflow- como reescribir esta secuen

Mensaje por hectorin »

muchas gracias!!!

me da una idea pero no me lo resuelve del todo. Te explico lo que he hecho:

Func Palante()
if $pala < 10 Then
Do
$pala += 1
Sleep(1000)
$resum = PixelSearch(688,79, 700, 87, 0x551771,3)
until @error=0
call("andando")
Else
Print ("Mas de 10 secs reiniciando")
call ("reinicio)
EndIf
EndFunc

va bien cuando encuentra el color, pero si no lo encuentra en 10 secs se keda sumando segundos sin llamar a la funcion reinicio

¿hay alguna forma de romper el "do" a los 10 secs? supongo que el if que he puesto no es la forma correcta
PDF
Hacker del Foro
Mensajes: 152
Registrado: 18 Ene 2013, 23:23

Re: problema con stack overflow- como reescribir esta secuen

Mensaje por PDF »

Hola..
Estas utilizando mal el bucle, pruebalo así:

Código: Seleccionar todo

Func Palante()
Local $i = 0
Do
Sleep(1000)
$resum = PixelSearch(688,79, 700, 87,
0x551771,3)
$i+=1
If $i>=10 then reinicio() ;si han pasado los 10 segundos
until @error=0
andando()
EndFunc
También puedes utilizar TimerInit() y TimerDiff() así:

Código: Seleccionar todo

Func Palante()
Local $timer=TimerInit()
Do 
$resum = PixelSearch(688,79, 700, 87,
0x551771,3)
If TimerDiff($timer)>=10000 Then _funcion2()
Until @error=0
_funcion1()
EndFunc
Saludos..
hectorin
Mensajes: 3
Registrado: 29 May 2014, 12:13

Re: problema con stack overflow- como reescribir esta secuen

Mensaje por hectorin »

muchas gracias voy a probarlo ahora mismo

:D
editado
testeado y chuta bien , tanto si lo encuentar en 10 secs como si no

ahora a ponerlo unas horas para ver si n me da el error de stack over flow


MUCHAS GRACIAS!!!!!!

:smt038 :smt038 :smt038 :smt038 :smt038 :smt038 :smt038 :smt038 :smt038 :smt041 :smt041 :smt041 :smt041 :smt041 :smt041 :smt041
Responder