Buenas, tengo un inconveniente y no encuentro una solucion. Veran tengo una aplicacion que necesita ejecutar una funcion, esta funcion se debe mantener activa hasta que la en la aplicacion suceda algo por ejemplo que cambie una variable, en pequeño ejemplo:
Sub Funcion()
' La aplicacion activa un suceso, ejemplo activa un command botton.
' La aplicacion se mantiene en esta linea sin pasar a la siguiente linea hasta que
' una variable cambie de valor, cuando la variable cambia de valor entonces
' pasa a la siguiente linea.
' Desactiva el suceso antes activado.
End Function
Esto yo lo habia logrado aplicando un doEvents junto con waitmessage, pero el problema surge cuando tengo que llamar dos veces a esa funcion, solo me ejecuta una a la vez, el doevents se mantiene en una funcion pero no me analiza la otra y esto me causa problemas, ya que ambas tienen condiciones diferentes, y si la condicion de una cambia mientras el bucle esta en la otra entonces se queda pegada esa funcion y no me sirve :S. Quisiera saber si saben alguna forma de solucionar esto o alguna alternativa que me sirva Gracias.
Saludos! XD!
Me huele a qué necesitas Hilos!¡, No es recomendable pero siendo tu caso seria con Hilos !¡.
CreateTheard!¡
Aun que la alternativa en VB6 es CreateWindowEx si no recuerdo y Sub-Clasificar la ventana creada y asi crear un hilo, pero bueno!¡.
Pero bueno sacando los hilos del tema, te vendría bien poner tu función en un Modulo de Clase si no me equivoco al respecto!¡.
Dulces Lunas!¡.
No manejo mucho los modulos de calse pero podrias dar un ejemplo de como lo harias? Aqui pongo un ejemplo de lo que quiero hacer:
En un form:
Option Explicit
Dim Variable As Integer
Private Sub Command1_Click()
Variable = 1
End Sub
Private Sub Command2_Click()
Variable = 2
End Sub
Private Sub Form_Load()
Timer1.Enabled = True
Timer2.Enabled = True
MsgBox "Se ejecutaron las funciones"
End Sub
Function Funcion1()
Debug.Print "Empezo la funcion 1"
Do
WaitMessage
DoEvents
Loop Until Variable = 1
MsgBox "Acabo la funcion 1 "
End Function
Function Funcion2()
Debug.Print "Empezo la funcion 2"
Do
WaitMessage
DoEvents
Loop Until Variable = 2
MsgBox "Acabo la funcion 2 "
End Function
Private Sub Timer1_Timer()
Timer1.Enabled = False
Call Funcion1
End Sub
Private Sub Timer2_Timer()
Timer2.Enabled = False
Call Funcion2
End Sub
Tengo 2 botones y dos funciones, los timers son para llamar a ambas funciones al mismo tiempo. Si se corre el ejemplo veran que las dos funciones inicializan pero la ultima en iniciar es la que se mantiene en el bucle mientras que la otra no.
Ejemplo si inicio la aplicacion y empieza la funcion1 y despues la funcion2 si aprieto el command1 que es el que modifica la variable para que salga de la funcion 1 no pasa nada pero si pulso el command2 si sale de la funcion 2 :S a ver si me pueden hechar una mano, he pensado en varias cosas pero no me sirven gracias de ante mano.
Sino me equivoco seria averiaguas la situacion de la funcion con GetProcAddress y con GetModuleHandle y la lanzas con CreateRemoteThread... yo estoy hablando de hacerlo ya con una dll!!! depsue sd ehaberla cargado en el proceso de nuestro exe.
salu2!
@DarkMatrix
http://www.recursosvisualbasic.com.ar/htm/tutoriales/modulos-de-clase-menu.htm
Mas o menos es esto lo que quieres o me equivoco?!¡...
Function Funcion2()
Debug.Print "Empezo la funcion 2"
Do
WaitMessage
DoEvents
Loop Until Variable = 2 Or Variable = 1
Debug.Print "Acabo la funcion 2 "
End Function
Aun qué si tienes muchas funciones de este tipo, es mejor hacerlo en un modulo de clase y sacarle en la sección qué desees un evento, así se ejecutaría un Código X determinado y se vería mejor ordenado!¡.
@Drinky94
CreateRemoteThread
Para qué querría tener un proceso remoto teniendo el código fuente a manipular?!¡...
Sangriento Infierno Lunar!¡.
BlackZerox ,Cierto... pero nose XD me dio el venazo y asi lo primero que pense fue en una dll jajajaj xD
salu2!
Cita de: BlackZeroX en 21 Julio 2010, 20:12 PM
@DarkMatrix
http://www.recursosvisualbasic.com.ar/htm/tutoriales/modulos-de-clase-menu.htm
Mas o menos es esto lo que quieres o me equivoco?!¡...
Function Funcion2()
Debug.Print "Empezo la funcion 2"
Do
WaitMessage
DoEvents
Loop Until Variable = 2 Or Variable = 1
Debug.Print "Acabo la funcion 2 "
End Function
No exactamente porque la Funcion 1 es distinta de la 2 y si una cambia la otra no se ve afectada, el problema surge que cuando ejecuto las 2 o mas de 2 solo me analiza la ultima en ejecutar por tanto si Variable = 1 y la ultima funcion ejecutada es la 2 no sale del bucle la 1 y asi se queda.
La idea es permanecer en ambos bucles de ambas funciones por separado de modo que si la variable toma un valor u otro las funciones reaccionen deacuerdo a su condicion de bucle.
PD: le hechare un vistazo a los modulos de clase :P Saludos!