Duda con bucle

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
owned2x
Mensajes: 5
Registrado: 30 Ene 2010, 06:23

Duda con bucle

Mensaje por owned2x »

Bueno ando haciendo un pequeño bot para un juego pero me tope con un problema en el bucle while, el script es el siguiente

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 200, 101, 192, 124)
$Button1 = GUICtrlCreateButton("Contar", 16, 64, 75, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Parar", 112, 64, 75, 25, $WS_GROUP)
$Label1 = GUICtrlCreateLabel("0", 96, 8, 20, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$contador = 0

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			contadorN()

	EndSwitch
WEnd

Func contadorN()
	While 1
		Sleep(100)
		$contador = $contador + 1
		GUICtrlSetData($Label1, $contador)

		If $contador = 100 Then
			$contador = 0
			EndIf

		WEnd

	EndFunc

mi duda es como puedo hacer para parar el while y tener el valor en 0, nose si me explico bien, he probando exitloop pero ya he leido que terminado un loop se termina por cerrar el programa, espero me puedan ayudar :smt027
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Duda con bucle

Mensaje por Chefito »

Si pones el exitloop() en el bucle principal del programa (while......wend), claro que se va a salir si luego no tiene más código. Tu no ibas mal. Hay que hacerlo en otro bucle while....wend dentro del principal para que se salga del secundario.
Pero esto tiene un problema. Y es que para que te recoja los mensajes de la ventana y objetos de ésta, y poder tratarlos, tienes que meter otro GUIGetMsg() dentro de este segundo bucle. Pero aun haciendo esto tendrás otro problema :smt002 , y es que al retrasar 100 milisegundos el bucle no te va a responder de inmediato el tratamiento de estos mensajes (ejemplos, darle a un botón o cerrar la ventana). Y esto no queda bien :smt018 .
Veo dos soluciones. O tratas el contador en el bucle principal con condiciones y comparando el tiempo (funciones timeinit y timediff), o utilizas la función _Timer_SetTimer para crear un contador asíncrono. Para destruir este contador utiliza _Timer_KillTimer. Esta última, es la mejor solución. Mira el ejemplo de 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
Nahuel
Hacker del Foro
Mensajes: 194
Registrado: 27 Jun 2007, 23:32
Ubicación: Argentina
Contactar:

Re: Duda con bucle

Mensaje por Nahuel »

Bueno, yo usaría Opt("GuiOnEventMode",1) para solucionar el tema del GuiGetmsg() dentro de los bucles (Se pone medio feo cuando uno tiene varios...)
No soy un hombre de plegarias, pero si estás en el cielo sálvame por favor Superman!
Responder