Página 1 de 1

problema con stack overflow- como reescribir esta secuencia

Publicado: 29 May 2014, 12:21
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

Re: problema con stack overflow- como reescribir esta secuen

Publicado: 29 May 2014, 14:11
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

Re: problema con stack overflow- como reescribir esta secuen

Publicado: 29 May 2014, 14:24
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

Re: problema con stack overflow- como reescribir esta secuen

Publicado: 29 May 2014, 15:26
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..

Re: problema con stack overflow- como reescribir esta secuen

Publicado: 29 May 2014, 15:43
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