Visual Basic.NET - multiproceso detiene ejecución programa principal

   
Vista:

multiproceso detiene ejecución programa principal

Publicado por Jorge (4 intervenciones) el 13/04/2014 16:42:48
Buenos días a todos
He programado una aplicación en Visual Basic 2008 para registrar los datos adquiridos por cuatro osciloscopios Tektronix vía Ethernet. La aplicación consta de un programa principal que se ejecuta ciclicamente mediante un temporizador. Este ejecuta varios subprogramas asíncronos utilizando el componente BackgroundWorker. En cada uno de estos subprogramas empleo las instrucciones de un componente ActiveX para la lectura de los datos de oscilosopios.
Los subprocesos parecen que trabajan bien ya que si programo una espera (sleep) en uno de ello el programa principal sigue ejecutándose ciclicamente mientras el subproceso se para en dicha instrucción.
El problema que tengo es que cuando solicito datos al osciloscopio en uno de los subprocesos asíncronos, la aplicación de Visual Basic se detiene hasta que el PC lee los datos del osciloscopio. Debido a esto no puedo realizar tareas en paralelo por lo que se detiene todo el programa y me conlleva un gran consumo de tiempo.

¿Sabéis porque puede ser esto?¿Que solución se le podría dar?

Muchas gracias y saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

multiproceso detiene ejecución programa principal

Publicado por Pico (168 intervenciones) el 13/04/2014 22:03:42
Lo que tienes o quieres tener es un proceso con varios hilos. Eso de subproceso no se sabe lo que es.

Un proceso tiene siempre un hilo al menos. Si tienes ese hilo principal del proceso y además tienes otro, sólo puede colgar el secundario al principal si están sincronizados de alguna manera. Si no, el secundario puede estar parado siempre, que al principal ni le va ni le viene. O eso, o que no tienes dos hilos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

multiproceso detiene ejecución programa principal

Publicado por Jorge (4 intervenciones) el 14/04/2014 19:27:50
Buenas tardes,

A lo mejor me he expresado mal. Lo que quiero tener es un proceso con varios hilos y para ello he empleado el componente BackgroundWorker. El problema es que cuando solicito algún dato al osciloscopio en uno de los hilos asíncronos, se me detiene la ejecución de todo el programa.
¿Porque puede ser?¿Cómo solucionarlo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

multiproceso detiene ejecución programa principal

Publicado por Pico (168 intervenciones) el 14/04/2014 19:55:34
No, me habré expresado mal yo.

Sí, quieres tener un proceso con varios hilos. Uno, el principal, que gestione ese proceso ( pintar ventanas, entradas de teclado y ratón... ) y luego unos cuantos más que lo que hagan sea leer de un osciloscopio. Y resulta que cuando un hilo va a leer de él se detiene todo.

Pues yo digo : sólo hay dos maneras de hacer que pase eso

1 - tienes los hilos sincronizados, de manera que si uno está esperando algo, los demás esperen también a que acabe.
2 - no tienes varios hilos sino uno sólo, con lo que si ese uno se queda esperando algo se para todo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

multiproceso detiene ejecución programa principal

Publicado por Jorge (4 intervenciones) el 18/04/2014 18:26:09
Pero yo estoy usando el componente BackgroundWorker para hacer hilos independientes. Quizás lo esté empleando incorrectamente o no me sirva para lo que yo quiero hacer. ¿Como me recomendarías que hiciese los hilos asíncronos?

Muchas gracias por tu dedicación.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

multiproceso detiene ejecución programa principal

Publicado por Pico (168 intervenciones) el 18/04/2014 19:19:28
El BackgroundWorker sí te sirve para lo que quieres hacer. Empleado correctamente tendría que hacer exactamente lo que quieres, así que me imagino que algo estarás haciendo mal. Pero sin ver el código....

Puedes comprobar fácilmente si tienes más de un hilo o no deteniendo el programa desde el menú Depurar. Cuando esté ejecutándose, con todos los supuestos hilos creados, le das a la pausa, y una vez pausado a Control + D + T. Entonces te sale una ventana con los hilos que haya en ejecución. Si sólo sale uno es que estás usando mal el BackgroundWorker.

El BackgroundWorker ejecuta como otro hilo la función que le pases dentro del evento DoWork.

worker.DoWork += new DoWorkEventHandler(ParaEjecutarEnOtroHilo);

void ParaEjecutarEnOtroHilo(object sender, DoWorkEventArgs e)
{
// otro hilo
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar