Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Detener funcion hasta que termine

Estas en el tema de Detener funcion hasta que termine en el foro de Visual Basic clásico en Foros del Web. Estimados, hace mucho que no trabajo en Vb y ahora estoy necesitando desarrollar una funcion, quisiera saber si dese aqui pueden ayudarme... Resulta que tengo ...
  #1 (permalink)  
Antiguo 12/06/2008, 07:23
 
Fecha de Ingreso: enero-2005
Ubicación: Salta - Argentina
Mensajes: 322
Antigüedad: 19 años, 4 meses
Puntos: 7
Detener funcion hasta que termine

Estimados, hace mucho que no trabajo en Vb y ahora estoy necesitando desarrollar una funcion, quisiera saber si dese aqui pueden ayudarme...


Resulta que tengo un codigo como este:

Código:
While Not rs.EOF

    guardaZIP RUTA, NombreZip, recursivo

rs.MoveNext
Wend
rs.Close
Donde GuardaZIP es una funcion que he desarrollado.

Ruta es el nombre del directorio o fichero a comprimir.
NombreZip es el nombre que tendria el archivo ZIP.
Recursivo indica si buscaria en las otras carpetas internas o no.

Mi problema exacto es que esta funcion esta dentro de un While, y es por esta razon que cuando se inicia el proceso de GuardaZIP (dependiendo del total de archivos de cada RUTA) se demora y llega a tildar la maquina.

Ya probe colocando DoEvents, pero no encuentro solucion con esa funcion.

Quisiera saber si de alguna forma puedo hacer que cuando se inicie la funcion GuardaZIP se "detega" el ciclo hasta que esta termine... para de este modo no saturar la memoria de la PC.

Alguien puede ayudarme respecto a esto? o alguna otra solucion que pudiese existir...

Desde ya muycas gracias.
  #2 (permalink)  
Antiguo 12/06/2008, 10:48
Avatar de Txoco  
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 11 meses
Puntos: 7
Respuesta: Detener funcion hasta que termine

Hola!

Para empezar, tienes que detener el flujo dentro de GuardaZip.

Como no sabemos qué codigo tiene, supondremos que estás lanzando una llamada al sistema mediante la función Shell.

Si esto es así, Shell es asíncrona, es decir, ejecuta el programa que le digas y, en cuanto puede, sigue ejecutando tu programa, de forma que se ejecutan los dos en paralelo, y si lo haces dentro de un bucle, tu programa estará lanzando hilos del otro como si le fuera la vida en ello, saturándote el equipo.

Si utilizas Shell, en las FAQ tienes cómo hacer para que tu programa se espere a que termine el otro (http://www.forosdelweb.com/f69/faqs-vb6-222289/index5.html#post1413172)

Si lo haces de otra forma, dínoslo, que entonces la cosa cambia!
  #3 (permalink)  
Antiguo 12/06/2008, 12:42
 
Fecha de Ingreso: enero-2005
Ubicación: Salta - Argentina
Mensajes: 322
Antigüedad: 19 años, 4 meses
Puntos: 7
Respuesta: Detener funcion hasta que termine

Si, siento por no aportar el dato quizas mas importante.

Lamentablemente lo estoy haciendo de otra forma...

Basicamente la funcion contiene lo siguiente:

function guardaZIP(ruta, NombreZip, recursivo)
With m_cZ
.ClearFileSpecs
.ZipFile = NombreZip
.BasePath = ruta
.AddFileSpec "*"
.StoreDirectories = True
.StoreFolderNames = True
.RecurseSubDirs = recursivo
.Zip
End With
end function

Y bueno, esa funcion trae toda una clase... que no se si seria util, pero por las dudas dejo el enlace: http://www.vbaccelerator.com/home/VB...le_Project.asp

Desde ya muy agradecido por tu ayuda.
  #4 (permalink)  
Antiguo 12/06/2008, 12:54
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Detener funcion hasta que termine

Por el momento, la única idea que se me ocurre sería crear otro ejecutable para guardar en ZIP (puedes enviarle parámetros y recuperarlos con Command), luego para ejecutar ese programa utilizas Shell como te mencionó Txoco (acerca del ejemplo en las FAQ's).
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 12/06/2008, 12:59
 
Fecha de Ingreso: enero-2005
Ubicación: Salta - Argentina
Mensajes: 322
Antigüedad: 19 años, 4 meses
Puntos: 7
Respuesta: Detener funcion hasta que termine

Si, luego de leer lo de Txoco, se me ocurrio esa idea tambien, ahora me voy a meter a jugar con los parametros entonces, jejeje

Muchisimas gracias por sus ayudas Txoco y David, fueron muy amables ambos...

Bueno, y si alguien sabe de algo mas, pues avise antes de comenzar con lo del otro ejecutable :)

Saludos cordiales...
  #6 (permalink)  
Antiguo 12/06/2008, 16:00
 
Fecha de Ingreso: enero-2005
Ubicación: Salta - Argentina
Mensajes: 322
Antigüedad: 19 años, 4 meses
Puntos: 7
Respuesta: Detener funcion hasta que termine

Disculpen que moleste tanto,

Les comento que logre hacerlo, y funciona todo Perfectamente con el comando con la funcion que me pasaron:

EsperarShell (App.Path & "\GeneraZip.exe ElParametro")

Todo funciona genial desde VisualBasico (con F5) pero cuando me voy a la opcion para crear el ejecutable, esta caracteristica deja de trabajar y por lo tanto el archivo GeneraZip.exe nunca es llamado.

En el load de GeneraZip.exe he colocado un MsgBox, pero nunca lo muestra cuando lo llamo desde mi aplicacion en VB

Me parece super extraño este comportamiento, a alguien le a pasado? existe alguna solucion para esto?

Quedo por favor a la espera de sus respuestas.
  #7 (permalink)  
Antiguo 12/06/2008, 16:05
 
Fecha de Ingreso: enero-2005
Ubicación: Salta - Argentina
Mensajes: 322
Antigüedad: 19 años, 4 meses
Puntos: 7
Respuesta: Detener funcion hasta que termine

Jejeje, lo siento, lo solucione....

El problema era el App.path.

he dejado el codigo de esta forma: EsperarShell ("GeneraZip.exe ElParametro") y ambos archivos en el mismo directorio.

Gracias nuevamente.
  #8 (permalink)  
Antiguo 13/06/2008, 11:37
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
De acuerdo Respuesta: Detener funcion hasta que termine

Me alegro que lo hayas solucionado. Cualquier duda estamos por aquí.

Saludos
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:19.