Comunidad de diseño web y desarrollo en internet online

PROBLEMAS CON FUNCIÓN EN BUCLE INFINITO

Citar            
MensajeEscrito el 03 Mar 2007 09:06 pm
a ver si consigo explicar bien el problema.

quiero hacer una aplicación q muestre en una WEB un archivo FLASH. éste archivo flash muestra datos q cargo desde una base da datos ACESS mediante un fichero ASP.

el flash muestra un mapa de fondo y mediante attachmovie cargo instancias de clip. Estos clips los coloco en las posiciones del mapa q cargo de la base de datos (como si quieres ver la posición real de unos coches en un mapa). Estas posiciones cambian en la base de datos contínuamente, con lo cual, también deberán cambiar en el archivo flash.

el tema es q quiero q se refresquen los datos contínuamente. No necesito animar nada.
tengo la función general(), q es la q contiene todas las sentencias q hace q caguen los datos

esto es lo q hago (q seguramente haya algo mal, xq no sé usar bien flash)
en el fotograma 1 tengo el mapa.
en éste fotograma tengo también el código de general()

lo primero q hago en el primer fotograma es parar la película (stop()), y luego llamar a genereal(), y esto me funciona y me cargan las intancias de clips en las posiciones q quiero. Todo bien para la primera carga.
Pero el tema es q quiero q se cargue indefinidamente.

he intentado hacer un bucle infinito (igual está mal), pero se queda colgado

while(1)
general();


y también he intentado hacer una llamada a función cada segundo intervalo de tiempo con setInterval(general(), 1000).
Esto me funciona, si el tiempo q tarda en ejecutarse general() es menor de 1000 milisegundos.
además hay q tener en cuenta q va a ser accesible por web. No quiero q dependa de un tiempo determinado.

entonces lo q quiero es q se ejecute la función general() y cuando termine, se vuelva a ejecutar otra vez, y así indefinidamente.


¿q hago mal?
¿q no entiendo de cómo funciona flash?
¿tengo q usar onFrameEnter?

por favor, ayuda

Por dark_airash

7 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Mar 2007 03:34 am
No se como cargues los datos, pero puedes hacer que cuando termine de mostrar tus datos (por ejemplo si hay 50 autos, cuando termine de acomodar y/o animar TODOS) te llame nuevamente a la funcion general(). esto no es muy bueno por que asi te puedes terminar todo el ancho de banda, yo diria que cuando acabes, esperes un tiempo prudente, pues no creo que tus datos se tengan que mostrar en tiempo real, quiza puedan tener uno o dos segundos de diferencia.

Por bryanisimo

664 de clabLevel



Genero:Masculino  

Geek

firefox
Citar            
MensajeEscrito el 04 Mar 2007 09:03 am
El while sería de forma continua, es decir, intenta ejecutar el código en un sólo frame de tiempo (no es como C o java que lo van digiriendo poco a poco). Asi que ni while's ni for's.

Como dice nekropixel, lo mejor es esperar a que cargue los datos, al llamar a un ASP sale de la película y "pierdes el control", algo como :

general();
general();

Lo que hace es que llamo al ASP, y sin esperar a que cargue o no lo vuelvo a llamar, lo mejor es esperarse a que vuelvan los datos (ya depende del método que utilices, si remoting, loadvars,...) tampoco es tan necesario tenerlo actualizado al segundo, establece un periodo de tiempo aceptable, por ejemplo 30 segundos, 20, 50... depende de lo que sea y a partir de ahí trabajas, el ritmo sería algo como

función general
recibo los datos
espero XX segundos
función general
... etc etc

Si además los datos no son muchos, tardará poco en recuperarlos (un par de segundos a lo sumo) por lo que es despreciable y podemos hacerlo más facil

setInterval(general,XX*1000); y se llamaría a la función general cada XX segundos (sin esperar a que carguen los datos) pero con un rango alto de segundos (por ejemplo 30) sabemos que cargará los datos (un par de segundos solo) antes de volver a llamar a la función general. Y le damos tiempo para que maneje el tema

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

firefox
Citar            
MensajeEscrito el 04 Mar 2007 09:21 am
uso loadvars() para cargar datos
la carga de datos la tengo dentro de la función general

¿cómo puedo saber el tiempo q tarda en cargar los datos?
¿cómo puedo saber cuanto tarda en ejecutarse general para así poder ejecutar con setInterval periódicamente?
¿como puedo hacer para q espere X segundos?

Por dark_airash

7 de clabLevel



 



Ultima edición por dark_airash el 04 Mar 2007 09:31 am, editado 1 vez

firefox
Citar            
MensajeEscrito el 04 Mar 2007 09:28 am
pues depende de los datos, pero si no son muchos son un par de segundos sólo.

Puedes hacer algo como

var tiempo:Number = getTimer();


tusLoadVars.onLoad = function() {

trace(getTimer()-tiempo);


};

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

firefox
Citar            
MensajeEscrito el 04 Mar 2007 09:33 am
¿y como puedo hacer para q espere 1 segundo después de cargar todo?

siento ser tan ignorante, y gracias!

Por dark_airash

7 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Mar 2007 09:45 am
¿no se puede alterar el intervalo de setInterval cuando este ha sido iniciciado, verdad?

el tema es q había puesto como intervalo inicial 2 seg y calculaba lo q tardaba general en ejecutarse mediante lo q has puesto arriba. pero al estar ya dentro de la ejecución en intervalo ya no podía cambiar el intervalo.
lo q podría hacer es comprobar q si tarda más en ejecutarse la función q el intervalo podría llamar otra vez a ejecutar el fotograma desde el inicio pero esta vez con
intervalo = lo q tarda en ejecutarse general() + un tiempo razonable por si acaso (500 ms por ejemplo)

el tema es q lo único q me falta es poder asignar el valor inicial a la variable intervalo. Pero ésta asignación debería ejecutarse sólo al inicio del archivo flash, y no cada vez q ejecute el fotograma 1.
creo q debería ser así.

¿q hago mal?

Por dark_airash

7 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.