Pausar con bucle.
Publicado: 13 Dic 2012 00:00
Hola buenas, me gustaría a ver si me podíais ayudar con este problema que tengo.
Tengo un programa que quiero que extraiga un archivo, 7-Zip a una carpeta con una barra de progreso.
No he sido capaz de encontrar la forma de hacer que lo haga diréctamente con el AMS, por lo que estaba haciendo un programa que cada cierto tiempo compruebe el tamaño de esa carpeta actualizando una barra de progreso.
He probado a hacerlo con el "Shell.Execute" y poniendo a que espere a terminar la extracción para continuar la ejecución, pero claro, eso congela el programa y no funciona la barra de progreso.
También he probado a ejecutarlo sin que espere, y poner un bucle con una función que compruebe si el programa se está ejecutando, pero me he encontrado con estos problemas:
Si pongo:
El programa funciona bien, pero el programa ocupa un 50% de la CPU (para un ordenador de un núcleo sería el 100%) sólo en hacer el sleep.
Si pongo:
El programa se queda congelado, y sólo reacciona cuando termina la extracción, con lo que la barra de progreso no se mueve.
Quería a ver si me podíais aconsejar alguna forma de extraer el archivo con barra de progreso o alguna alternativa de bucle que no sea un ocupa-CPU's, ni congele la aplicación...
PDTA: No me sirve poner el script de actualización de la barra de progreso en el bucle, ya que es pesado y ralentizaría mucho la extracción...
También decir, que para mi es importante que sea 7-Zip el archivo comprimido, ya que con la compresión que me ofrece puedo meter dos instalaciones de 6GB y 5.6GB en 3.35GB. Si lo hago en ZIP, ZIP 2.0 o RAR, que son los que conozco plugins para descomprimir con barra de progreso, el tamaño hace que crezca a más de 4.2GB y no me entra en un DVD.
Un saludo y muchas gracias.
Tengo un programa que quiero que extraiga un archivo, 7-Zip a una carpeta con una barra de progreso.
No he sido capaz de encontrar la forma de hacer que lo haga diréctamente con el AMS, por lo que estaba haciendo un programa que cada cierto tiempo compruebe el tamaño de esa carpeta actualizando una barra de progreso.
He probado a hacerlo con el "Shell.Execute" y poniendo a que espere a terminar la extracción para continuar la ejecución, pero claro, eso congela el programa y no funciona la barra de progreso.
También he probado a ejecutarlo sin que espere, y poner un bucle con una función que compruebe si el programa se está ejecutando, pero me he encontrado con estos problemas:
Si pongo:
while unzipcheck() == true do
Application.Sleep(10000);
end
El programa funciona bien, pero el programa ocupa un 50% de la CPU (para un ordenador de un núcleo sería el 100%) sólo en hacer el sleep.
Si pongo:
while unzipcheck() == true do
end
El programa se queda congelado, y sólo reacciona cuando termina la extracción, con lo que la barra de progreso no se mueve.
Quería a ver si me podíais aconsejar alguna forma de extraer el archivo con barra de progreso o alguna alternativa de bucle que no sea un ocupa-CPU's, ni congele la aplicación...
PDTA: No me sirve poner el script de actualización de la barra de progreso en el bucle, ya que es pesado y ralentizaría mucho la extracción...
También decir, que para mi es importante que sea 7-Zip el archivo comprimido, ya que con la compresión que me ofrece puedo meter dos instalaciones de 6GB y 5.6GB en 3.35GB. Si lo hago en ZIP, ZIP 2.0 o RAR, que son los que conozco plugins para descomprimir con barra de progreso, el tamaño hace que crezca a más de 4.2GB y no me entra en un DVD.
Un saludo y muchas gracias.