Duda del post: ¿Ejecutar consultas en Paralelo?

Mi pregunta es acerca del post
http://www.todoexpertos.com/categorias/tecnologia-e-internet/programacion/visual-basic/respuestas/168589/se-pueden-ejecutar-consultas-en-paralelo
Donde se expone como ejecutar varios procesos al mismo tiempo, tipo multithreading o multiprocesos.
Tengo la siguiente duda:
¿Por qué es necesario el Timer?
Voy a intentar describir el funcionamiento del programa que se escribió, a como yo lo entiendo con la intención de especificar más mi duda.
Según entiendo:
El timer se define con un tiempo muy corto, ademas de la propiedad Enable a False que se desactiva a si mismo. Ademas descarga el formulario que se cargo en el sub Procesar en la clase Ejecutor. (* Pregunta 1)
^
El sub Procesar del formulario habilita su timer. (* Pregunta 2)
^
En la clase Ejecutor, dentro del sub Procesar, se crea una instancia del form1, junto con sus subs Procesar y Timer (Dim iProceso As VBMTEjecutor.Proceso y Set iProceso = New VBMTEjecutor.Proceso).
Luego carga y muestra la instancia del form1 (Load iProceso).
Se llama al sub Procesar, del formulario, pasándole un numero, como parámetro (iProceso. Procesar Id).
Finalmente se vacia el objeto (= Nothing).
^
En las propiedades del proyecto, se marca la opción Subproceso por objeto.
* Yo me imagino que esto de que se aplique esta opción, es porque se estan creando instancias de un objeto, y cada objeto adquiere su propio espacio por separado, en memoria (* Pregunta 3).
^
Después se crea un proyecto nuevo, al que se hace referencia al ActiveX, el cual contiene la instancia a un nuevo objeto (form1), y a la vez, sus subs.
Al tener la referencia del ActiveX, éste (el proyecto) es instanciado con As VBMTEjecutor y = New VBMTEjecutor, llamando a su clase Ejecutor, y se ejecuta su sub Procesar pasándole un numero como parámetro.
Se crean 2 instancias, para crear 2 objetos, y que por lo mismo, al crearse más de un objeto, cada uno va a tener su espacio por separado, en memoria (* Pregunta 4).
* Pregunta 1: Por que es necesario inhabilitar el timer?
También supongo que se descarga el formulario (Unload Me) pues de lo contrario habría tantos forms como instancias del objeto, ¿esto es cierto?
* Pregunta 2: LA MAS IMPORTANTE Y QUE NO ME QUEDA CLARO. Por que es necesario agregar un timer. Un timer al formulario? (La respuesta obvia es que no funcionaría, y ya lo he comprobado, pero no es la respuesta que espero. Sino, por que es necesario que esté?)
* Pregunta 3 y 4: Lo que comenté para la pregunta 3 y 4, son ciertas las afirmaciones que hago, es decir, los conceptos los he entendido de forma correcta?
Me despido

1 Respuesta

Respuesta
1
te hago una pregunta.. ¿en vb 6 o .net?
Hola amigo, que tal:
Mira, sería en vb 6
Gracias
Saludos
Mmmmmm andale pensé que era en .net.. pero bueno. En .net cuando quieres hacer procesos paralelos levantas un hilo de procesamiento por cada ejecución.. y también se agrega un timer para controlar los tiempo de respuesta del proceso.. pero.. en vb6 no se..
:( Ni modo.
Pero mira, de igual forma, el concepto ha de ser parecido (supongo) y la pregunta, seguro que la misma:
¿Por qué se necesita el timer?
Estuve haciendo una pruebas, siguiendo las mismas instrucciones, solo que le quite el timer y obviamente no funcionó.
Incluso, quería incluir un código en mi pregunta, pero por cantidad de caracteres, no cupo.
Había pensadoq que si en lugar de un timer, se incluyera un for, quizá pudiera funcionar, aunque no lo he probado. Por otro lado, he notado que una serie de for, tipo for x... : for y... : for z... next: next: next con bucles largos puede alentar la aplicación, y posiblemente no sea la solución, pero te digo, no lo he probado, así que habría que hacer la prueba.
El problema es que no lo puedo hacer, si no he entendido la idea de usar el timer. Igual y uso la serie de for's y funciona, pero lo estaría haciendo sin entender porque es necesario un temporizador.
¿Si me explique?
Los hilos en .net se pueden ejecutar con o sin timer.. ahora.. para vb6 asumo que no se podrá pero aquí tedejo una razón del porque en .net si se quiere ejecutar un hilo se puede usar el timer.
Para ejecutar el hilo cada cierto tiempo, lo más sencillo es utilizar alguna de las clases que implementan un temporizador. Por ejemplo, puedes usar System. Threading. Timer. La clase Timer permite especificar cada cuántos segundos quieres ejecutar un método, y ella sola ya obtiene un hilo del ThreadPool y ejecuta en ese hilo el procedimiento que le indicas. De esa forma, ni siquiera te tienes que molestar en escribir el código para crear el hilo.
Para que los dos hilos no escriban a la vez sobre tu arreglo, hay que utilizar un mecanismo de bloqueo, de los muchos que .Net tiene para este fin. El más sencillo de utilizar desde C# (aunque no necesariamente el más eficiente) es la sentencia "lock":
     lock (objeto) { sentencias; }
De esta forma creas lo que se denomina una "región crítica" (la formada por esas sentencias), que sólo puede ser ejecutada por un hilo a la vez. En esas sentencias metes el código que graba sobre tu lista circular.
Vientos tnathos :) !
Te agradezco mucho tu respuesta. Fue muy clara y ya he entendido el porque de tal procedimiento.
Le voy a seguir "echando ojo" al ejemplo, para entender, EN LA PRACTICA, como usar y agregar el código que necesite.
Si me surge una duda en las pruebas, te vuelvo a molestar :-P
Muchas gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas