Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: ABDERRAMAH en 11 Enero 2013, 23:38 pm



Título: ¿que técnica asíncrona debo usar?
Publicado por: ABDERRAMAH en 11 Enero 2013, 23:38 pm
Bueno, el tema es que tengo un programa en visual basic que para funcionar tiene que ejecutar un "main loop" constantemente, en el loop se envían señales a otros formularios que son con los que interactua el usuario. El timer se me quedó corto así que busqué maneras más rápidas de ejecutar el main loop, comencé a reprogramarlo en modo consola con dos while anidados y usando un tickcounter para que el ciclo sea sincronizado. La velocidad es como 100 veces más rápida, pero ahora tengo un problema.

Al instanciar un formulario desde el main loop y mostrarlo éste parece estar todo el tiempo en espera (cargando, con el relogito) y aunque recibe las órdenes que le llegan del main loop no dispara sus eventos correctamente. Parece ser que no puedo hacerlo en un solo hilo, así que supongo que habrá una manera de hacer correr el formulario en otro. He leido sobre los métodos asíncronos en visualbasic.net, y veo que hay formas diferentes de hacerlo, algunas me sirven y otras no. El tema es que necesito mucha velocidad, porque los mensajes que recibe el form se traducen en ordenes gdi para dibujar objetos, pero a la vez no quiero cuellos de botella ni parones mientras el main loop está en espera.

¿Teneis alguna idea de por dónde tirar? ¿qué tipo de método asíncrono me garantiza que los dos hilos corran bien y puedan comunicarse?


Título: Re: ¿que técnica asíncrona debo usar?
Publicado por: Novlucker en 14 Enero 2013, 00:04 am
Me he asustado un poco con lo último de los dibujos con GDI+ :xD Por lo que entiendo, el problema sería que el form esta recibiendo más datos de los que puede procesar/dibujar no? Tal vez lo he entendido mal, pero en este caso, por más que se ejecute en otro hilo seguirá existiendo el cuello de botella :-\

Saludos


Título: Re: ¿que técnica asíncrona debo usar?
Publicado por: ABDERRAMAH en 14 Enero 2013, 17:59 pm
Bueno, estoy haciendo un lenguaje de programación interpretado que corre sobre una máquina virtual. Hay un timer para la máquina, y otro para dibujar el buffer gráfico. El código puede mandar órdenes gráficas que se dibujan en el buffer, yo quiero que el dibujado de buffer en la superficie no interfiera en el loop principal. (Bueno, también he empezado a coquetear con directX, pero me llevará tiempo crear las clases que necesito...)


Título: Re: ¿que técnica asíncrona debo usar?
Publicado por: Oblivi0n en 14 Enero 2013, 18:18 pm
Has pensado en guardar los mensajes en una cola, e ir sacandolos cuando proceda?


Título: Re: ¿que técnica asíncrona debo usar?
Publicado por: ABDERRAMAH en 14 Enero 2013, 18:38 pm
Lo probaré y comento.


Título: Re: ¿que técnica asíncrona debo usar?
Publicado por: ABDERRAMAH en 19 Enero 2013, 13:59 pm
Bueno, he reprogramado el renderizador optimizando algo la velocidad, no he usado threads ni siquiera una pila, pero he reducido mucho las llamadas a eventos. El problema en modo consola sigue, pero creo que voy a pasar de liarme más con esto y voy a meterme en directX. Ahora estoy teniendo otros problemas para dibujar con el objeto sprite de directX, pero el diseño del objeto que encapsula directX me está gustando como me está quedando.