Page 1 sur 1
[R] Sortir fonction infinie en cas action commencer 1 autre
Posté : dim. 10 juin 2012 14:01
par plop22
bonjour!
voilà je bloque,
Dans mon script j'ai une fonction A qui commence quand on lance le script, elle est "infinie" car tant qu'un évènement spécial ne se produit pas pas, elle continue de tourner en "monopolisant" le programme.
Mais voilà que je voudrais lancer une fonction B en cas d'appui sur un bouton; il faut donc "éteindre" la A et lancer la B
La structure de mon code ressemble à ceci:
Code : Tout sélectionner
la gui etc blabablabala ..
while 1
switch $nmsg
case truc
case bidule
case le bouton qui m’intéresse
On lance la fonction B
endswitch
la fonction A se lance .......
J'ai passé plusieurs heures à essayer de trouver, j'ai fais pleins de systèmes qui modifient une variable et après on test sa valeur et selon celle ci on fait telle ou telle chose, enfin j'ai vraiment fais le tour de mes (humbles) connaissances en autoit, et la j'en peux plus!
donc je remercie chaleureusement tous ceux qui auront la gentillesse de m'aider!

Re: [..] Sortir fonction infinie en cas action commencer 1 a
Posté : dim. 10 juin 2012 14:12
par matwachich
HotKeySet
Re: [..] Sortir fonction infinie en cas action commencer 1 a
Posté : dim. 10 juin 2012 14:28
par plop22
heu, je vois pas bien pourquoi, vu qu'il faut cliquer sur un bouton de la gui pour déclencher B ()
(je pense que tu as compris "touche" au lieu de "bouton")
Re: [..] Sortir fonction infinie en cas action commencer 1 a
Posté : dim. 10 juin 2012 14:42
par PandiPanda
quelque chose à l'arrache comme ceci?
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Opt('MustDeclareVars', 1)
Global $Button_1="", $Button_2="", $msg, $gui
AdlibRegister("verif",50)
Example()
Func Example()
$gui = GUICreate("My GUI Button") ; will create a dialog box that when displayed is centered
Opt("GUICoordMode", 2)
$Button_1 = GUICtrlCreateButton("Test1", 10, 30, 100)
$Button_2 = GUICtrlCreateButton("Test2", 0, -1)
GUISetState() ; will display an dialog box with 2 button
; Run the GUI until the dialog is closed
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $Button_1
While 1
Sleep(50)
; tourne en boucle
WEnd
Case $msg = $Button_2
MsgBox(0, 'Testing', 'Button 2 was pressed') ; Will demonstrate Button 2 being pressed
EndSelect
WEnd
EndFunc ;==>Example
Func verif()
$msg = GUIGetMsg()
If $msg = $Button_2 Then
MsgBox(0, 'Testing', 'Button 2 was pressed')
ElseIf($msg = $GUI_EVENT_CLOSE) Then
Exit
EndIf
EndFunc
Re: [..] Sortir fonction infinie en cas action commencer 1 a
Posté : dim. 10 juin 2012 15:19
par plop22
pardonne moi, mais je ne comprends pas vraiment ton code (l'aide sur adlib n'est pas très explicite)
Re: [..] Sortir fonction infinie en cas action commencer 1 a
Posté : dim. 10 juin 2012 15:41
par mikell
Re: [..] Sortir fonction infinie en cas action commencer 1 a
Posté : dim. 10 juin 2012 16:06
par plop22
ok, mais du coup comment faire pour que
quand A s’arrête, on puisse lancer B directement et ne pas recommencer A
?
Re: [..] Sortir fonction infinie en cas action commencer 1 a
Posté : dim. 10 juin 2012 17:52
par mikell
Comme ça, pour reprendre l'exemple du Panda
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Global $Button_1="", $Button_2="", $msg, $gui, $stop=0
AdlibRegister("verif",50)
$gui = GUICreate("My GUI Button")
Opt("GUICoordMode", 2)
$Button_1 = GUICtrlCreateButton("Test1", 10, 30, 100)
$Button_2 = GUICtrlCreateButton("Test2", 0, -1)
$label = GuiCtrlCreateLabel("", 30, 50, 30, 30)
GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $Button_1
_run()
Case $msg = $Button_2
$stop = 1
MsgBox(0, 'Testing', 'Button 2 was pressed')
EndSelect
WEnd
Func _run()
Do
If $stop = 1 Then Exitloop
$nb = GuiCtrlRead($label)
GuiCtrlSetData($label, $nb+1)
Sleep(500)
Until $stop = 1
GuiCtrlSetData($label, "")
EndFunc
Func verif()
$msg = GUIGetMsg()
If $msg = $Button_2 Then
$stop = 1
MsgBox(0, 'Testing', 'Button 2 was pressed')
ElseIf($msg = $GUI_EVENT_CLOSE) Then
Exit
EndIf
EndFunc
Panda il est vraiment à l'arrache ton script (perso j'aurais mis le adlib sur la fonction A )
Re: [..] Sortir fonction infinie en cas action commencer 1 a
Posté : dim. 10 juin 2012 18:58
par plop22
merci pour vos réponses, mais j'ai finalement trouvé une solution j'appelle la fonction B dans la A ( je remet le switch nmsg dans ma fonction A et du coup je peut appeler B avec le case bouton)
et comme c'est des fonction tcp je fais un tcpshutdown et un tcpstart
cependant vos réponses n'auront pas étés inutiles puisque je pense m'en servir pour autre chose
merci beaucoup! résolu.
Re: [R] Sortir fonction infinie en cas action commencer 1 au
Posté : lun. 11 juin 2012 10:21
par TommyDDR
"Sortir" "infinie" -> ExitLoop
Re: [R] Sortir fonction infinie en cas action commencer 1 au
Posté : lun. 11 juin 2012 10:23
par GhostLine
Tu m'as pris de vitesse

Re: [R] Sortir fonction infinie en cas action commencer 1 au
Posté : lun. 11 juin 2012 12:00
par plop22
le problème étant que la fonction n'est pas une boucle !!
(c'est un tcpaccept qui dure jusqu’à ce qu'un client se connecte)
Re: [R] Sortir fonction infinie en cas action commencer 1 au
Posté : lun. 11 juin 2012 13:23
par TommyDDR
plop22 a écrit :c'est un tcpaccept qui dure jusqu’à ce qu'un client se connecte
Et vous le faites "durer" de quelle manière ?
Re: [R] Sortir fonction infinie en cas action commencer 1 au
Posté : lun. 11 juin 2012 18:57
par Myki
TommyDDR a écrit :Et vous le faites "durer" de quelle manière ?
Et bien tu mets le TCPAccept dans une boucle.
La condition de sortie est la socket renvoyée par le TCPAccept (>0).
Re: [R] Sortir fonction infinie en cas action commencer 1 au
Posté : lun. 11 juin 2012 19:28
par plop22
nan il a raison il faut une boucle >.<
un truc genre do until $socket <> -1
excuse moi

Re: [R] Sortir fonction infinie en cas action commencer 1 au
Posté : lun. 11 juin 2012 20:26
par blacksoul305
Oh Au pire voilà un code commenté :
► Afficher le texte
Code : Tout sélectionner
$socket = TCPListen($ip,$port)
If $socket = -1 Then ; si la création du socket a échoué on quittte
MsgBox(16,"","La création du socket a échoué")
Exit
EndIf
Do
$accept = TCPAccept($socket) ; on accepte une connexion
Sleep(10)
Until $accept <> -1 ; tant que l'on en a pas reçu une
Re: [R] Sortir fonction infinie en cas action commencer 1 au
Posté : lun. 11 juin 2012 21:56
par plop22
oui c'est à peu près ça que j'ai fait! :p