MultiProceso

Iniciado por DarkMatrix, 21 Julio 2010, 00:47 AM

0 Miembros y 1 Visitante están viendo este tema.

DarkMatrix

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:

Código (vb) [Seleccionar]
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!


Todo aquello que no se puede hacer, es lo que no intentamos hacer.
Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0)

Desing by DarkMatrix

BlackZeroX


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!¡.
The Dark Shadow is my passion.

DarkMatrix

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:

Código (vb) [Seleccionar]
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.

Todo aquello que no se puede hacer, es lo que no intentamos hacer.
Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0)

Desing by DarkMatrix

fary

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!
Un byte a la izquierda.

BlackZeroX

#4
@DarkMatrix

http://www.recursosvisualbasic.com.ar/htm/tutoriales/modulos-de-clase-menu.htm

Mas o menos es esto lo que quieres o me equivoco?!¡...

Código (vb) [Seleccionar]


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!¡.
The Dark Shadow is my passion.

fary

BlackZerox ,Cierto... pero nose XD me dio el venazo y asi lo primero que pense fue en una dll jajajaj xD

salu2!
Un byte a la izquierda.

DarkMatrix

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?!¡...

Código (vb) [Seleccionar]


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!

Todo aquello que no se puede hacer, es lo que no intentamos hacer.
Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0)

Desing by DarkMatrix