Página 1 de 1

Duda con bucle

Publicado: 30 Ene 2010, 06:51
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

Re: Duda con bucle

Publicado: 31 Ene 2010, 15:21
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.

Re: Duda con bucle

Publicado: 04 Feb 2010, 07:20
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...)