como recorrer todas las instancias de una class public

12/07/2011 - 03:46 por flyguille | Informe spam
*VB6*

Estoy haciendo un componente ActiveX EXE con la finalidad de que se
ejecuten tareas en paralelo (software multi-proceso).

en este activex exe, tengo declarada 1 clase pública multiuse, de modo
que las aplicaciones clientes crearán on-demand las instancias que
necesite. Hasta acá todo bien.

Aparte, tengo un form digamos global que tiene un timer de hardware
(una dll que usa uno de los timers de hardware).

este formulario global es cargado desde Sub Main, cuando un app-
cliente genere la primera instancia.

Hasta ahí todo bien.

Ahora, desde el evento timer de hardware, que está en el formulario
global del componente, yo tengo que recorrer todas las instancias
existentes que tenga la clase pública del ActiveX EXE (que recordemos
es off process desde la perspectiva de una aplicación cliente).

instituivamente pensé en un For Each ptrclasse in Classes, pero eso
tira error, como es para referirse a la collection classes en vb6?, ya
estuve buscando un montón de documentación, y si bien hay ejemplos,
pero lo que están se refieren que desde la clase (cada instancia) se
crea dinámicamente una instancia de un form que tiene un timer común y
con WithEvents se conecta esa instancia del timer con el módulo de
clase, lo cual a mi no me sirve porque estoy usando un timer de
hardware (y para los que no saben, hay muy pocos timers de hardware en
la PC, no es un recurso que pueda desperdiciar uno por cada instancia,
creo q leí que hay 8 timers de hardware para tooodo el sistema).

Entonces la idea era desde un formulario global -> timer de hard ->
evento del timer -> en un bucle ejecuto un método público dado en
todas las instancias creada de la clase que ofrece el componente
activeX

quien me dice como se hace el *for each* para recorrer todas las
instancias de una clase dada en el componente activeX ?
 

Leer las respuestas

#1 flyguille
14/07/2011 - 15:35 | Informe spam
On 11 jul, 22:46, flyguille wrote:
*VB6*

Estoy haciendo un componente ActiveX EXE con la finalidad de que se
ejecuten tareas en paralelo (software multi-proceso).

en este activex exe, tengo declarada 1 clase pública multiuse, de modo
que las aplicaciones clientes crearán on-demand las instancias que
necesite. Hasta acá todo bien.

Aparte, tengo un form digamos global que tiene un timer de hardware
(una dll que usa uno de los timers de hardware).

este formulario global es cargado desde Sub Main, cuando un app-
cliente genere la primera instancia.

Hasta ahí todo bien.

Ahora, desde el evento timer de hardware, que está en el formulario
global del componente, yo tengo que recorrer todas las instancias
existentes que tenga la clase pública del ActiveX EXE (que recordemos
es off process desde la perspectiva de una aplicación cliente).

instituivamente pensé en un For Each ptrclasse in Classes, pero eso
tira error, como es para referirse a la collection classes en vb6?, ya
estuve buscando un montón de documentación, y si bien hay ejemplos,
pero lo que están se refieren que desde la clase (cada instancia) se
crea dinámicamente una instancia de un form que tiene un timer común y
con WithEvents se conecta esa instancia del timer con el módulo de
clase, lo cual a mi no me sirve porque estoy usando un timer de
hardware (y para los que no saben, hay muy pocos timers de hardware en
la PC, no es un recurso que pueda desperdiciar uno por cada instancia,
creo q leí que hay 8 timers de hardware para tooodo el sistema).

Entonces la idea era desde un formulario global -> timer de hard ->
evento del timer -> en un bucle ejecuto un método público dado en
todas las instancias creada de la clase que ofrece el componente
activeX

quien me dice como se hace el *for each* para recorrer todas las
instancias de una clase dada en el componente activeX ?



ya fue esta pregunta, gracias de todos modos, tal vez fue una cuestión
avanzada, investigué como 6 horas más, y terminé haciendo que las
instancias del componente se subscriban an una collection global in
process, q luego desde un procedimiento global inprocess recorre la
colección, y ejecuta el procedimientos Timer de cada instancia.

como TIP: es importante que al no necesitar más la ejecución de su
método timer, la instancia se desubscriba a sí misma de la collection
global, o la instancia no se descargará cuando el programa cliente la
deseche, porque la mera existencia de una referencia interna del
componente activeX.exe hará q la instancia no se descargue.

Cuando en la documentación habla "una referencia interna al objeto no
hará que éste se mantenta vivo", en realidad se refiere a una
referencia DESDE DENTRO de la CLASE, no desde dentro del EXE o DLL.

Entonces una referencia en un módulo normal, u otro formulario, se
considera referencia externa y por ende hará que la clase no se
descargue.

Todo un drama que me tomó 2 días descubrir.

Preguntas similares