Page 1 sur 1
Mes thread se fusionnent !? [MAJ]
Publié : lun. 20/juin/2011 10:47
par Shinao
Hello,
Petit soucis que je ne comprend pas, surtout que je viens de commencer les thread...
J'ai deux erreurs, mais je pense qu'en résolvant l'un je résous l'autre :
http://www.heberge-tes-images.fr/image- ... FF1D9C.jpg
http://www.heberge-tes-images.fr/image- ... FF1D9C.jpg
Dans mon premier thread, il met à jour un gadget toutes les x secondes pour faire un "Veuillez patienter..." dynamique.
Dans mon deuxième, il lance un RunProgram()...
Bref rien de bien complexe, sauf que mon erreur affiche qu'il ne trouve pas le fichier blabla, il a pris mon RunProgram et mon SetGadgetText de l'autre thread... !?
J'ai pensé que c'est parce que mes noms de variable que je passe en paramètre dans le thread (d'ailleurs je ne sais pas à quoi ils servent) étaient les même, je les ai changé mais rien y fais.
Code : Tout sélectionner
CreateThread(@WaitText(), 48)
CreateThread(@LauchInstall(), 80)
Mes Declare :
Code : Tout sélectionner
Declare LauchInstall(lauchinstallparam)
Declare ChangeEtape(changeetape)
Quelqu'un à une idée ?
Merci d'avance
Re: Mes thread se fusionnent !?
Publié : lun. 20/juin/2011 11:01
par falsam
Regarde cette exemple et la façon dont est déclarée la procédure.
Code : Tout sélectionner
Enumeration
#MainForm
#StartStop
#Result
EndEnumeration
Declare Count(*Value)
Procedure Count(*Value)
For i=0 To 10000
SetGadgetText(#Result, "Compteur = "+Str(i))
If GetGadgetData(#StartStop)=#False
Break
EndIf
Next i
EndProcedure
Procedure MainFormShow()
OpenWindow(#MainForm,0,0,300,200,"Exemple avec Thread",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
TextGadget(#Result, 20 ,30, 120, 20, "Compteur = 0")
ButtonGadget(#StartStop, 200, 25, 70, 20, "Start/Stop")
EndProcedure
MainFormShow()
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #StartStop
If GetGadgetData(#StartStop)=#False
SetGadgetData(#StartStop, #True) ;Indiquer au bouton qu'il est actif
CreateThread(@Count(), 0)
Else
SetGadgetData(#StartStop, #False)
EndIf
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Re: Mes thread se fusionnent !?
Publié : lun. 20/juin/2011 11:04
par falsam
Un autre exemple expliquant comment parcourir un dossier avec une fonction récursive, commencer à afficher le résultat dans une liste, visualiser cette liste pendant l'éxécution de la fonction récursive et enfin stopper le scan du dossier quand on veut.
Re: Mes thread se fusionnent !?
Publié : lun. 20/juin/2011 11:06
par Shinao
J'ai mis les étoiles (pointeurs ?) et les erreurs ont l'air d'avoir disparus...
Thanks
Ps : merci pour l'ex' ça pourrait m'être utile :]
Re: Mes thread se fusionnent !?
Publié : mar. 21/juin/2011 8:46
par Shinao
UP
Et oui! Mon erreur est toujours d'actualité, en faite, parfois, l'erreur ce produit, on recommence et ça marche... :
Code : Tout sélectionner
Procedure WaitText(*waittextparam)
Repeat
NbPoints + 1
If NbPoints = 4
NbPoints = 1
EndIf
SetGadgetText(#TextWait, "Veuillez patienter" + Left("...", NbPoints))
Delay(1000)
Until WaitTextFinish = 1
SetGadgetText(#TextWait, "Veuillez patienter")
EndProcedure
Procedure LauchInstall(*lauchinstallparam)
installer = RunProgram(pathreseau$+"\"+Programmes(soft)\patheu$, Programmes(soft)\parametre$, "", #PB_Program_Open|#PB_Program_Wait)
Else
MessageRequester("Erreur", "Fichier de préférences corrompu, veuillez contacter l'administrateur réseau.")
End
EndIf
; le fichier s'est lancé au moins une fois
If installer <> 0
; le programme s'est lancé et arrêté (on va cherche le exitcode)
If ProgramRunning(installer) = 0
erreur.i = ProgramExitCode(installer)
; le programme s'est terminé correctement
If erreur.i = 0
MessageRequester("Installation", Programmes(soft)\programme$+" à bien été installé.")
RAZ()
EndIf
; le programme a eu une erreur lors de l'installation
If erreur.i > 0
MessageRequester("Erreur", "Impossible de lancer l'installation, veuillez contacter l'administrateur réseau.")
RAZ()
EndIf
EndIf
; le fichier est introuvable ou ne peux pas etre lancé
Else
MessageRequester("Installation Automatique", "Fichier introuvable ou impossible à lancer. Contactez l'administrateur réseau.")
RAZ()
EndIf
Code : Tout sélectionner
CreateThread(@WaitText(), 48)
CreateThread(@LauchInstall(), 80)
Quelqu'un comprend ? J'ai l'impression que mon thread LauchInstall() prend le setgadgettext() selon le delay()...
Merci d'avance
Edit : image de l'erreur :
http://www.heberge-tes-images.fr/image- ... FF1D9C.jpg
Re: Mes thread se fusionnent !? [MAJ]
Publié : mar. 21/juin/2011 9:50
par falsam
Regarde si par hasard, tu n'a pas rendu Disable la fenêtre qui contient le gadget #TextWait.
Re: Mes thread se fusionnent !? [MAJ]
Publié : mar. 21/juin/2011 10:41
par Shinao
Are you a wizard ?
non plus sèrieusement, oui en effet j'ai un disable pour pas que l'utilisateur trifouille pendant l'installation... mais je comprend pas comment ça agis sur mes thread ? Car même si la fenêtre est disabled, je peux toujours faire mon setgadgettext().
Explications, por favor ?
Thanks
Edit : j'ai enlevé le disablewindow(), toujours la même erreur qui survient 1 fois sur 5 a peu près...
Edit2 : J'ai enlevé maintenant le disablewindow (en mode 0, je pensais qu'il était pas important), 1 erreur sur 8 maintenant mais après ça veux surement rien dire