Re: Bugs en RJ(t)



Hola Juan Fernando

Creo que he encontrado el fallo, prueba esto por favor:

en src/execute/event.cs
líneas: 228-232

               if(needEndEvent) {
                       eventExecuteWin.EventEnded();
                       //needEndEvent = false;
               } else
                       updateTimeProgressBar();

cámbialas por esto


                updateTimeProgressBar();
               if(needEndEvent) {
                       eventExecuteWin.EventEnded();
                       //needEndEvent = false;
               } else
                       //updateTimeProgressBar();


Parece que cuando se termina el salto depende de cómo estén los hilos,
no se llamaba al updateTimeProgressBar() que es el que se encarga de
actualizar la barra de progreso que estaba fallando.

En cuanto alos otros cambios que te pedí, puedes mantenerlos, sirven
para garantizar que se actualice la información.

Puede que esto falle también en los carreras en intérvalos limitadas por tiempo.


Lo que escribes está bien, es lógico, pero piensa que es mucho más
complejo por el tema de los hilos. Por ejemplo: el needEndEvent es una
variable que indica que un evento debería terminar, y esto lo indica
un hilo de ejecución del programa (imagínate que es un procesador que
está ocupado con algunas tareas del programa) en cambio otro hilo
(podría ser otro procesador con otras tareas diferentes), cuando ve
este needEndEvent (pues comparten la variable) entonces realiza el
cambio.

Por qué con hilos? pues porque GTK no es "thread-safe" entonces para
que se pueda hacer clic en sitios como el finalizar o cancelar
mientras se actualiza la gráfica con datos que vienen del puerto
serie... hay que hacerlo con hilos.

En un futuro espero que breve, mono lanzará un evento por cada cosa
nueva que le llegue por el puerto serie (o usb-serie, es lo mismo),
cuando esto esté programado, creo que se podrá prescindir de los
hilos, entonces reprogramaré toda la ejecución de eventos -y tengo
ganas- para que sea algo parecido a lo que indicas, más claro y
provoque menos errores.

Hasta que no llegue ese momento, hay que valorar si los bugs que
eventualmente aparecen son importantes o no y si es fácil arreglarlos.
En este caso, el fallo no afectaba al resultado que se guardaba, sólo
al que se visualizaba en una parte de la pantalla en un momento
concreto, y sólo en algunas ocasiones de algunos ordenadores (a mi aún
no me ha pasado nunca, es lo que tienen los hilos). Si además con el
cambio que te presento hoy se arregla, pues de momento el sistema
actual sirve.

Pero te agradezco mucho tus comentarios pues ayudan a mejorar el programa.

Se arregló el fallo?

Saludos

2007/6/14, Juan Fernando Pardo <juanfer juanfer com ar>:
Xavier,
Te comento que hice el cambio, pero me apareció nuevamente el "error".
Te adjunto una imagen para que veas.

Como no tengo bien claro como se programa con "hilos", te pregunto lo
siguiente. ¿Es muy dificil que las comprobaciones se hagan de la
siguiente forma?

//Esperando contacto para empezar
llamar contacto //cuando se produce el contacto, se llama a la funcion

contacto()
{
si tiempo_acumulado < tiempo_establecido
  saltos=saltos+1
  llamar vuelo //cuando se inicia el vuelo, llamo a la funcion
sino
  estado=contacto
  llamar terminar_evento
}

vuelo()
{
si tiempo_acumulado < tiempo_establecido
  llamar contacto //cuando se inicia el contacto, llamo a la funcion
sino
  estado=vuelo
  llamar terminar_evento
}

terminar_evento()
{
si estado=contacto
  si permitir_despues_de_tiempo=si entonces saltos=saltos+1
  llamar actualizar_graficos_y_barras
sino
  llamar actualizar_graficos_y_barras
}



Saludos
Juanfer


El mié, 13-06-2007 a las 16:40 +0200, Xavi de Blas escribió:
> Hola juan Fernando
>
>
> 2007/6/12, Juan Fernando Pardo <juanfer juanfer com ar>:
> > Xavier,
> > He aplicado el cambio, compilado nuevamente y probado.
> > Tuve que intentar muuuchas veces más para que aparezca el "fallo", pero
> > apareció.
> > Adjunto 2 imágenes.
> >
>
>
> Bueno, parece que el error se va limpiando, creo que con lo que te
> pedí limpiamos la barra de progreso de saltos. Para la barra de
> progreso de tiempo, por favor, cambia esto:
>
> ***********************
> needUpdateGraph = true;
> updateProgressBar = new UpdateProgressBar (
>     true,
>     jumpsLimited,
>     Util.GetNumberOfJumps(tvString, false)
>     );
> needUpdateEventProgressBar = true;
> }
> ************************
>
> por esto (sólo es añadir una línia antes de la llave final, sólo hay
> que hacerlo una vez, en las mismas líneas que cambiaste la otra vez):
>
> ***********************
> needUpdateGraph = true;
> updateProgressBar = new UpdateProgressBar (
>     true,
>     jumpsLimited,
>     Util.GetNumberOfJumps(tvString, false)
>     );
> needUpdateEventProgressBar = true;
> updateTimerCountWithChronopicData(tcString, tvString);
> }
> ************************
>
> si no mejora se me ocurre otro cambio, pero antes prueba esto, cuando
> me digas algo lo subo al svn para no continuar mandando líneas de
> código por correo.
>
>
> > En la imagen RJt-3 cumplí el salto 6 y permanecí en la plataforma (en
> > realidad lo hice con el pulsador) hasta que se cumpla el tiempo
> > establecido (5 segundos), luego salté y caí de nuevo. Finalizó el
> > evento, no sumó el salto 7 (como corresponde), pero sí quedó el tiempo
> > final, el que debía indicar cuando finalicé el salto 7. En este caso
> > tenía la opción "Permitir RJ terminar después del tiempo".
> >
> > En la imagen RJt-4, sin la opción "Permitir RJ terminar después del
> > tiempo", terminé el salto 5 dentro del tiempo establecido (5 segundos),
> > y al iniciar el 6 se cumple el tiempo, caigo ya excedido el tiempo, y no
> > lo cuenta, como corresponde, pero queda mostrando el tiempo de la caída
> > del salto 6.
> >
> > En ambos casos, en la ventana principal de los resultados está bien, es
> > solo errónea la información en la ventana de eventos.
> >
> >
> > Pregunta: ¿Qué es la información del renglón "DE"?
>
> La desviación estándar o típica (en inglés se suele abreviar SD
> standard deviation, aunque en muchos ámbitos se le llama Typical
> Dev.), una medida de la similitud de los datos. por ejemplo para ver
> la variación de ritmo de un individuo es imprescindible. En un rj
> largo puede ser interesante que en un futuro se divida en 3 o 5 partes
> y se vea la DE de cada parte
>
> Por ejemplo, para ver si los chicos tienen unos valores de salto más
> similares entre ellos que las chicas te puede servir.
>
> > Comentarios: Si sumás todos los tiempos de contactos, te da 878
> > milésimas, y en los resultados muestra 880. ¿Es algún "error" de
> > redondeo"?
> > En el caso de los tiempos de contacto, la diferencia es de solo 1
> > milésima. 3,446 que se muestra contra 3,445 que suman los saltos.
> >
>
> Ves a las preferencias y aumenta los decimales que se muestran.
>
>
> El método de redondeo es el que se explica aquí
>  http://www.go-mono.com/docs/index.aspx?link=M%3aSystem.Math.Round(System.Double)
>
> en el que cuando se encuentra en la mitad siempre redondea hacia el número par.
>
> Round(4,5) = 4
> Round(4,5) = 4
> Round(5,5) = 6
>
> aunque esto ***sólo se usa en la ventana de saltos***, en el resto no
> se redondea de momento, sólo se "capan" decimales. En una futura
> versión se redondeará mejor.
> Cuando se redondee bien en todo el programa, entonces no se observarán
> problemas de sumas como el que adviertes.
> No será nada difícil, al fin y al cabo todos los decimales se "capan"
> usando el Util.TrimDecimals() sólo hay que poner el redondeo allí y ya
> está
> voy  a poner un bug con esto
>
> saludos y gracias
>
>
> >
> > Saludos
> > Juanfer
> >
> >
> >
> > El mar, 12-06-2007 a las 18:38 +0200, Xavi de Blas escribió:
> > > Hola Juan Fernando
> > >
> > > Lo he probado unas 15 veces y no he conseguido reproducir el error,
> > > por otro lado, me gustaría que probases de añadir unas líneas a ver si
> > > resuelve este problema, y me cuentas qué tal. Es nuevamente un
> > > problema de threads.
> > >
> > > prueba de hacer esta modificación en el archivo src/execute/jump.cs
> > >
> > > cambia las líneas 850 y 851
> > >
> > > ***************
> > > needUpdateGraph = true;
> > > }
> > > ***************
> > >
> > > por esto:
> > >
> > > ***************
> > > needUpdateGraph = true;
> > > updateProgressBar = new UpdateProgressBar (
> > >     true,
> > >     jumpsLimited,
> > >     Util.GetNumberOfJumps(tvString, false)
> > >     );
> > > needUpdateEventProgressBar = true;
> > > }
> > > ***************
> > >
> > > Ya nos contarás, gracias
> > >
> > > 2007/6/12, Juan Fernando Pardo <juanfer juanfer com ar>:
> > > > Xavier,
> > > > Encontré lo siguiente en el Chronojump del SVN.
> > > > En los saltos RJ(t), cuando se cumple el tiempo y estoy sobre la
> > > > plataforma, luego de realizar el salto y la caída para que verifique que
> > > > el tiempo terminó, en la ventana del evento pasa lo siguiente, (pero
> > > > solo en algunas oportunidades)
> > > >
> > > > 1. Me deja el tiempo de la última caída, no el que había antes de
> > > > realizar el último salto, pero me muestra bien la cantidad de saltos, ya
> > > > que no suma este último.
> > > >
> > > > 2. Me suma este último salto, pero me muestra bien el tiempo, ya que
> > > > queda mostrando el último tiempo válido antes que realice el salto.
> > > >
> > > > Pero estas 2 cosas solo están mal en la ventana del evento, en el
> > > > resumen que guarda en la base de datos lo muestra bien.
> > > >
> > > > Adjunto 2 imágenes para corroborar lo que digo.
> > > > En el caso 1, ver como en la ventana de eventos dice un tiempo, y en la
> > > > pantalla principal del programa dice otro.
> > > > En el caso 2, ver como en la ventana de eventos figura un salto más.
> > > >
> > > > Y me apareció nuevamente el bug que aparece reiteradamente el mensaje
> > > > cuando presiono "Cancelar" en la ventana de eventos, pero no lo pude
> > > > volver a reproducir, no recuerdo como hice para que aparezca. Voy a
> > > > seguir intentando.
> > > >
> > > >
> > > > Saludos
> > > > Juanfer
> > > >
> > > >
> > > >
> > > >
> > > > _______________________________________________
> > > > Chronojump-list mailing list
> > > > Chronojump-list gnome org
> > > > http://mail.gnome.org/mailman/listinfo/chronojump-list
> > > >
> > > >
> > > >
> > > _______________________________________________
> > > Chronojump-list mailing list
> > > Chronojump-list gnome org
> > > http://mail.gnome.org/mailman/listinfo/chronojump-list
> >
> > _______________________________________________
> > Chronojump-list mailing list
> > Chronojump-list gnome org
> > http://mail.gnome.org/mailman/listinfo/chronojump-list
> >
> >
> >
> _______________________________________________
> Chronojump-list mailing list
> Chronojump-list gnome org
> http://mail.gnome.org/mailman/listinfo/chronojump-list

_______________________________________________
Chronojump-list mailing list
Chronojump-list gnome org
http://mail.gnome.org/mailman/listinfo/chronojump-list






[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]