Romper ejecución un script con un sleep

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
Avatar de Usuario
quinux
Aprendiz de Mago
Mensajes: 35
Registrado: 25 Abr 2008, 10:08

Romper ejecución un script con un sleep

Mensaje por quinux »

Hola a todos,

Estoy realizando un script que realiza una tarea cada cierto tiempo. Para ello tengo el siguiente código:
Opt("TrayMenuMode",1)

$gSalir = TrayCreateItem("Salir")

TraySetState()

While 1
$msg = TrayGetMsg()
Select
Case $msg = $gSalir
ExitLoop
case Else
pEnvioMail($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
Sleep(300000)

EndSelect
WEnd
GUIDelete()
Exit

El caso esque cuando selecciono salir del menú desplegable, el programa no me hace ni caso. ¿ qué hago mal?
Creéis que 1000 = 1?
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Romper ejecución un script con un sleep

Mensaje por Chefito »

La orden sleep detiene totalmente la ejecución del programa. Por eso, hagas lo que hagas no te va a obedecer.
Prueba a utilizar la función AdlibRegister para repetir una acción cada cierto tiempo. Es lo más facil. Mírala en la ayuda.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
quinux
Aprendiz de Mago
Mensajes: 35
Registrado: 25 Abr 2008, 10:08

Re: Romper ejecución un script con un sleep

Mensaje por quinux »

Gracias, probaré esto y el consejo de ximorro
Creéis que 1000 = 1?
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Romper ejecución un script con un sleep

Mensaje por Ximorro »

Bueno depende de lo que quieras hacer, si lo que quieres es cerrar el programa es mejor la otra opción porque interrumpirá en cuanto le des a la combinación de teclas.
Si lo que quieres es comprobar algo cada cierto tiempo entonces lo bueno es la solución de Chefito.

De todas maneras bloquear un GUI como haces no es buena idea, da "mala imagen" al usuario porque el GUI no le responde y parece que se pierde el control de la aplicación, que hay que cerrar abruptamente.

La función GUIGetMsg es bloqueante y hace que el programa consuma muy poca CPU cuando está en el bucle de comprobación de eventos, puedes comprobarlo en el administrador de tareas por ejemplo. Así que no haría falta ponerle un Sleep si lo que te preocupa es la CPU.

Para programar tareas cada cierto tiempo usa el AdlibRegister, pero sin el Sleep.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
quinux
Aprendiz de Mago
Mensajes: 35
Registrado: 25 Abr 2008, 10:08

Re: Romper ejecución un script con un sleep

Mensaje por quinux »

La solución de Chefitos me ha venido de perlas, MUCHAS GRACIAS. Da gusto que te respondan con rapideza y seguridad. :smt041 :smt041 :smt041 :smt041
Gracias a ti también ximorro por tus consejos :smt041 :smt041 :smt041 :smt041 :smt041 :smt041
Creéis que 1000 = 1?
Responder