Página 1 de 1

Detener todo lo que la aplicación esté haciendo

Publicado: 10 Nov 2009, 01:37
por joanfran55
Hola a todos.
Debe ser una chorrada, pero estoy haciendo un programa para automatizar descargas, el cual debe hacer muchas descargas seguidas de archivos de 200 kilobytes. Nada, todo está claro:

Código: Seleccionar todo


While $i < $number  

        

    $i = $i + 1

$String7=$var & $Stringbarra & $name & $Stringbarra & $name & $String3 & $String4 & $String5

$String6=$line & $name & $String3 & $String4 & $String5



InetGet($String6, $String7)

WEnd

 
Bueno, el caso es que va fenomenal, los archivos se descargan y funcionan perfectamente, pero mi pregunta, y lo que no he podido hacer es:

Parar de descargar ANTES de terminar el While si el usuario aprieta el botón "parar descarga"

Mi idea fue esta:

Código: Seleccionar todo


While $i < $number And $Gmsg <> $Button1  

        

    $i = $i + 1

$String7=$var & $Stringbarra & $name & $Stringbarra & $name & $String3 & $String4 & $String5

$String6=$line & $name & $String3 & $String4 & $String5



InetGet($String6, $String7)

WEnd

 
Siendo $Gmsg el setstate del menu y button1 un botón que le he puesto y que aparece.

Pues nada, el boton aparece, pero por más que le doy, no se paran las descargas.

Re: Detener todo lo que la aplicación esté haciendo

Publicado: 10 Nov 2009, 10:56
por Ximorro
No se puede parar así porque el código está bloqueado en InetGet mientras está descargando. No tengo muy clara la gestión del mensaje del botón pero en cualquier caso sólo funcionaría si aprietas justo cuando acaba de descargar un archivo y va a pasar al suguiente, prácticamente eso lo hace en tiempo cero así que es prácticamente imposible.

¿Funcionará un hotkey mientras está descargando? En vez de un botón prueba a poner un hotkey que aborte el programa, a ver si InetGet no lo bloquea.
La alternativa es poner InetGet en segundo plano, eso quiere decir que el programa se sigue ejecutando mientras descarga, no creas que es tan chollo porque sólamente una descarga puede estar activa, con lo que hay que estar controlando cuánto dura para no lanzar otra, aunque mientras haces eso también puedes estar comprobando el botón y entonces cancelar la descarga.

Prueba a ver si funciona el hotkey que si eso va será más fácil. Si hay que hacerlo de la segunda manera las claves son
InetGet("URL","nombrefichero", default, 1) El 1 es lo que activa descarga en segundo plano
@InetGetActive, que te dice si aún está descargando
InetGet("abort"), que aborta un InetGet en segundo plano.

Con eso puedes hacerlo, si no va lo del hotkey y no te aclaras lo dices e investigamos cómo hay que montarlo...

Re: Detener todo lo que la aplicación esté haciendo

Publicado: 10 Nov 2009, 16:30
por joanfran55
Muchas gracias por la respuesta, Ximorro, pero era mucho más fácil:

Código: Seleccionar todo

While $i < $number 

$nMsg=GUIGetMsg()

    If $nMsg = $Button5 Then

        ExitLoop

       Else



    $i = $i + 1



$String7=$var & $Stringbarra & $name & $Stringbarra & $name & $String3 & $String4 & $String5



$String6=$line & $name & $String3 & $String4 & $String5







InetGet($String6, $String7)

  EndIf

WEnd
Terminaría de descargarse el archivo que se está descargando, sí, pero una vez termine ya no continuará descargando el resto de archivos. lo he probado varias veces y parece ser que funciona.

Muchas gracias

Re: Detener todo lo que la aplicación esté haciendo

Publicado: 11 Nov 2009, 10:09
por Ximorro
Ya decía yo que no tenía clara la gestión del mensaje del botón, tenías que haber puesto todo el código al principio.

Ah, entonces aunque esté bloqueado en InetGet parece que GuiGetMsg almacena los eventos y te los da luego. ¡Pues me alegro!