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?
Romper ejecución un script con un sleep
Romper ejecución un script con un sleep
Creéis que 1000 = 1?
- 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
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.
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 ;).
Re: Romper ejecución un script con un sleep
Gracias, probaré esto y el consejo de ximorro
Creéis que 1000 = 1?
- 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
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.
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)
Re: Romper ejecución un script con un sleep
La solución de Chefitos me ha venido de perlas, MUCHAS GRACIAS. Da gusto que te respondan con rapideza y seguridad.
Gracias a ti también ximorro por tus consejos
Gracias a ti también ximorro por tus consejos
Creéis que 1000 = 1?