Comment arreter proprement une thread ?
Publié : mar. 26/juil./2005 11:47
Voila dans mon lecteur d'image, je fais calculer les vignettes des photos et je les affiches au fur et à mesure....
Lorsque l'utilisateur clique sur un autre répertoire je doit arreter la thread qui calcule les photos pour la relancer pour un nouveau répertoire.
Je donne ici un exemple simplifier du problème.
Lorsque l'on clique sur compteur, le compteur défile correctement.
Lorsque l'on clique sur stop, la variable fin_thread se met à 1 et arrete le compteur ! Mais la thread ne va pas au bout de son code pour donner la confirmation de l'arret (fin_thread=2). Comme si la thread était arrete par le Delay ???
Voila si quelqu'un pouvais m'aider, merci d'avance
Lorsque l'utilisateur clique sur un autre répertoire je doit arreter la thread qui calcule les photos pour la relancer pour un nouveau répertoire.
Je donne ici un exemple simplifier du problème.
Lorsque l'on clique sur compteur, le compteur défile correctement.
Lorsque l'on clique sur stop, la variable fin_thread se met à 1 et arrete le compteur ! Mais la thread ne va pas au bout de son code pour donner la confirmation de l'arret (fin_thread=2). Comme si la thread était arrete par le Delay ???
Voila si quelqu'un pouvais m'aider, merci d'avance

Code : Tout sélectionner
Global fin_thread
Procedure creer_vignette_thread(ess)
i=1
Repeat
i=i+1
Delay(100)
SetGadgetText(4,Str(i))
Until i=10000 Or fin_thread=1
fin_thread=2
EndProcedure
If OpenWindow(0,10,10, 150, 300, #PB_Window_SystemMenu ,"memory")
If CreateGadgetList(WindowID(0))
ButtonGadget(1, 50, 75, 100, 20, "compteur" ,#PB_Button_Default)
ButtonGadget(2, 50, 120, 100, 20, "stop compteur" ,#PB_Button_Default)
EndIf
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_EventGadget
Select EventGadgetID()
Case 1
OpenWindow(3,200,100, 300, 200, #PB_Window_SystemMenu ,"ess")
If CreateGadgetList(WindowID())
TextGadget(4, 10, 10,250,20,"compteur")
EndIf
CreateThread(@creer_vignette_thread(),ess)
Case 2
fin_thread=1
Repeat
Delay(5)
Until fin_thread=2
MessageRequester("alerte","fin thread",0)
EndSelect
EndIf
If EventID = #PB_EventCloseWindow
If EventWindowID() = 0
Final.l = 1
CloseWindow(0)
CloseWindow(3)
Else
CloseWindow(3)
EndIf
EndIf
Until Final.l = 1
EndIf
End