En la página principal de los foros
encontrarás los enlaces al
feed general
y al de cada uno de los foros.
Subscribete para mantenerte informado de los cambios y responde a las dudas siempre que te sea posible
Hola chicos, estoy intentando imprimir un calendario por con ...
Hola ,para lograr eso tenes que crear tu propio modelo para ...
¡Hola a todos! Ya estoy de vuelta aquí otra vez.... He estad ...
perdon , he probado co \n no con /n
Buenas, he probado con /n y esa solución no es viable. Hay a ...
| Reducir uso CPU | 15/05/2008 16:27 | |
| Xeros |
Hola gente! Tengo un problemilla: He escrito un programillla usando JFrame al que he intregrado recientemente un pequeño Canvas. Pues bien, antes de integrar el canvas el uso de CPU era razonable pero ahora con el añadido el uso del repintado obliga a utilizar la CPU en un 100% continuamente. Sabeis si hago algo mal? Se agradece cualquier ayuda. |
|
|
||
| RE: Reducir uso CPU | 15/05/2008 17:41 | |
| Caledor |
La única solución que te puedo aportar por el momento es que uses algún debugger o profiler para Java. Todos los IDEs que conozco incorporan alguno y sino en eclipse (que es el que uso) hay bastantes plugins que lo hacen como: El que usé fue el último, y por tanto el que te aconsejo pero eso no quiere decir que no haya uno mejor que otro. Hasta que encuentres quien es el comedor de CPU te entretendrás bastante. ¡¡suerte!! |
|
|
||
| RE: Reducir uso CPU | 15/05/2008 17:43 | |
| RuGI | Que haces con el canvas... pintas sobre el? insertas imagenes? | |
|
||
| RE: Reducir uso CPU | 15/05/2008 18:51 | |
| Xeros |
El canvas lo uso para insertar un contador (como string), no ocupa mas que lo justo para ver el tiempo:
Como nota adicional, el contador esta basado en la diferencia entre un tiempo de referencia y el tiempo actual. Si comento la llamada a repaint del contador, el uso de CPU vuelve a la normalidad (sin incrementar el contador, obviamente).
Gracias, por vuestras respuestas. Se os ocurre algo mas? |
|
|
||
| RE: Reducir uso CPU | 15/05/2008 18:59 | |
| RuGI | Y si cambias el canvas por un JLabel? | |
|
||
| RE: Reducir uso CPU | 16/05/2008 12:46 | |
| Caledor |
¿cada cuánto tiempo se actualiza el canvas? |
|
|
||
| RE: Reducir uso CPU | 16/05/2008 12:58 | |
| Xeros |
Ciertamente RuGI, cambiar el canvas por un JLabel reduciria la carga de CPU pero no sabría como integrar el contador y que se actualice. Tendria que ponerme a hacer pruebas.... Podrias darme unos consejos si crees que asi se soluciona.
Caledor, la llamada a repaint la hago con el metodo sin argumentos, repaint(), por lo que se repinta tantas veces como java tenga el uso del procesador. He probado a cambiar la llamada por el metodo con 1 argumento, x ejemplo, repaint(2000), para que se repinte cada 2 segundos (y tendria que ver como el contador se actualiza cada 2 segundos), pero no es así(misterios de la vida) igualmente se actualiza cada segundo.
Gracias a todos por vuestra ayuda, me haceis un gran favor. |
|
|
||
| RE: Reducir uso CPU | 16/05/2008 15:08 | |
| jCalamaro |
Hola. Estimo que sólo estás queriendo actualizar el contador, por lo que estas llamando al método repaint() del componente donde se encuentra tu contador, ya sea este un canvas u otro componente, y no al método repaint() de un contenedor del componente del contador. Si esto es asi, no debería traerte ningun problema de consumo de cpu, implementar un thread que cada segundo llame al método repaint() del canvas. Si utilzas JFrame como contenedor principal no es dificil implemetar tu contador sobre un JLabel como te recomendo RuGi. Quiza si me muestras algo de tu código te podria recomendar algo más concreto o te indicaría donde está tu error. Saludos. |
|
|
||
| RE: Reducir uso CPU | 16/05/2008 17:53 | |
| RuGI |
He hecho una clase para que la pruebes, solo asegurate de establecer a false la condicon cuando termine tu aplicacion.
/* |
|
|
||
| RE: Reducir uso CPU | 17/05/2008 19:26 | |
| Xeros |
Hola a todos, siento haber tardado en responder, he estado un poco liado. jCalamaro, entendiste bien (ya se que no he sido muy claro en mis explicaciones), invoco a repaint desde el canvas que se inserta sobre un JFrame principal. Al final he "solucionado" el problema, mas bien lo he parcheado. Probe una tonteria y sin saber porque ha funcionado, me explico: En el metodo paint, una vez realizo todos los pintados necesarios invoco a repaint (con lo que entraria en un bucle). Lo que he hecho es antes de llamar a repaint provocar un sleep de 1 ms con Thread.sleep(1). Notar que solo uso 1 hilo para toda la aplicacion. Sin saber porque el uso de CPU se ha reducido al nivel normal y como el sleep es muy pequeño el usuario no puede notar esa pausa. Que suerte la mia!
Os agradezco a todos vuestra ayuda! Os dejo mi mail por si estais interesados en echar un vistazo al codigo (ya por curiosidad mas que nada). topilloveloz@gmail.com Mandadme un correo y os adjunto el codigo fuente.
Chao y gracias! |
|
|
||
| RE: Reducir uso CPU | 18/05/2008 18:33 | |
| batch4j | Lo que parece mas bien es que llamas a repaint cada 1 ms, lo cual se debe a que tanto paint como repaint se llaman uno al otro, y solo se deberian llamar a repaint cuando haya algo que pintar. | |
|
||
| RE: Reducir uso CPU | 19/05/2008 06:27 | |
| jCalamaro |
Hola Xeros. No deberias llamar a repaint() desde tu sobreescritura del metodo paint() o por lo menos no es la soloucion mas efectiva. Lo que te sucedia es que el CPU procesaba a full ya que estas obligando el repintado en un bucle infinito, al darle un sleep de un milisegundo, estas haciendo que el thread le de un respiro a tu procesador cada un milisegundo. Te envie un mail. |
|
|
||
| RE: Reducir uso CPU | 20/05/2008 16:52 | |
| jCalamaro |
Estuve mirando el codigo de tu contador, y en realidad lo que debes hacer es mejorar un un poco tu diseño, separando lo que es componente grafico del contador y una clase que lo maneje, tal como ejemplifico correctamente RuGi. La clase encargada del repintado del contador sera un thread que en su metodo run() especifica cada cuanto tiempo se invocara al metodo repaint() del componente. Tan simple como el ejemplo de RuGi. Saludos. |
|
|
||