Visual Basic - wait

Life is soft - evento anual de software empresarial
 
Vista:

wait

Publicado por Vane (23 intervenciones) el 23/02/2005 17:14:18
Quisiera saber como se hace para detener una funcion hasta que otra cosa suceda, tengo un programa que debe ejecutar otros programas (Programa A y Programa B), sin embargo el programa B no puede ejecutarse hasta que el A haya corrido y creado un archivo, como esto no tiene un tiempo fijo no puedo usar un timer...... Agradeceria una ayuda..
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

RE:wait

Publicado por Christian (675 intervenciones) el 23/02/2005 17:21:11
Pero puedes hacer lo siguiente VANE:
Utiliza una variable.
DIM FLAG AS BOOLEAN

1.- Cuando termine tu PROGRAMA A
FLAG = TRUE
2.- Y solo asi si FLAG = TRUE then
Ejecutas tu PROGRAMA B

IF FLAG = TRUE THEN
EXECUTE PROGRAMAB
ENDIF

Suerte, espero te ayude :)
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

RE:wait

Publicado por vane (23 intervenciones) el 23/02/2005 19:39:52
Oye esa es una buena idea, pero como se hace para indicar que un programa termino de correr...En el paso 1 para mandar a colocar FLAG=TRUE, como indico que sea justo cuando termine programa A... Muchas gracias
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

RE:wait

Publicado por Christian (675 intervenciones) el 23/02/2005 19:45:53
Muy simple Vane, como estas haciendo tu PROGRAMA A??, lo que debes hacer es ponerlo al final de todas las instrucciones que hagas dentro de éste, me entiendes?? explico:

Sub ProgramaA
xxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
FLAG = TRUE
End Sub

Entediste?? si no me hablas por el correo OK. Suerte.
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

RE:wait

Publicado por Vane (23 intervenciones) el 23/02/2005 20:06:03
Lo que pasa es que el programa A, es un ejecutable hecho en matlab, y el programa B es otro ejecutable pero en fortram, y el programa que estoy haciendo en visual los coordina
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

RE:wait

Publicado por Christian (675 intervenciones) el 23/02/2005 20:12:32
ah bueno debes comenzar x ahi pues..uhmmm , es que no se como ejecutas estos programas desde el Visual, si me dieras mas informacion quiza. Me imagino lo siguiente:

IF PROGRAMA_MATLAB = TRUE THEN 'que se ejcuto bien y para eso tienes que devolver en tu programa Boolean

EXECUTE PROGRAMA_FORTRAM
ENDIF

Espero te ayude esto, pero como te digo necesito mas datos o si no, no te voy a poder ayudar
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

RE:wait

Publicado por vane (23 intervenciones) el 23/02/2005 20:20:16
los ejecuto usando este codigo:
'Ejecutar el Archivo
MyValue = Shell("rundll32.exe url.dll, FileProtocolHandler " & "programaA", vbMaximizedFocus)

el programa A esta hecho para crear un archivo "datos.txt" y es precisamente esto lo que necesita el programaB para correr, habia pensado en que el programaB se ejecutara si y solo si "datos.txt" existe, pero no se como hacer para que visual revise la carpeta y vea si en efecto se ha creado "datos.txt" y le asigne a una variable el valor de true.........disculpa la molestia de antemano
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

RE:wait

Publicado por Christian (675 intervenciones) el 23/02/2005 20:37:08
MyValue que cosa te devuelve?? el nombre del archivo?? o TRUE o FALSE..
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

Simple solucion

Publicado por Otro Ja Ja Ja (1 intervención) el 24/02/2005 01:50:29
Para Christian:

¿Por que te metes a contestar preguntas?, si se nota a simple vista que eres un mugre asno.

Para Vane:

En efecto, puedes utilizar la condicion de verificar si el archivo txt existe (utilizando la funcion Dir), para ejecutar el otro programa. Ejemplo.

MyValue = Shell("rundll32.exe url.dll, FileProtocolHandler " & "programaA", vbMaximizedFocus)
Do until strArchivo="datos.txt"
strArchivo=Dir("C:\Tu carpeta\datos.txt")
Loop
MyValue = Shell("rundll32.exe url.dll, FileProtocolHandler " & "programaB", vbMaximizedFocus)

En este codigo, el ProgramaB solo se va a poder ejecutar, hasta que se halla creado el archivo datos.txt.
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

RE:Otra idea

Publicado por EGV (385 intervenciones) el 24/02/2005 15:23:17
Se me ocurrio si tu llamas al segundo ejecutable desde el primero yt luego cierras el primero, una vez que el segundo esta en funcionamiento, si el segundo de inmediato toma el archivo, bueno pues que haga otra cosa o que espere un enter por ejemplo para comenzar a trabajar.

De este modo te aseguras que :

A haya creado el archivo
B sea llamado
A se cierre
B comience con su trabajo
Bueno es algo que se me ocurrio, no se si funcionara, pero como dices que vos hiciste los programas, probablemente no te sea imposible modificarle algunas lineas de instruccion para logra lo dicho aca
Suerte
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

RE:wait

Publicado por Cecilia Colalongo (3116 intervenciones) el 24/02/2005 16:17:13
Fijate con ésto:

Const STILL_ACTIVE = &H103
Const PROCESS_QUERY_INFORMATION = &H400

Declare Function OpenProcess Lib "Kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long

Declare Function GetExitCodeProcess Lib "Kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long

Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Public Sub ExecCmdNoFocus(ByVal CmdLine As String)
Dim hProcess As Long
Dim RetVal As Long
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(CmdLine, vbHide))
Do
GetExitCodeProcess hProcess, RetVal
DoEvents
Sleep 100
Loop While RetVal = STILL_ACTIVE
End Sub
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