En utilisation dans un programme fenêtré on aurait donc ce genre de chose :
Code : Tout sélectionner
Enumeration
#Win
#Text_time
#btn_go
#btn_stop
EndEnumeration
Global var$ = ""
Procedure Thread_count(*param)
For a = 1 To 15000
SetGadgetText(#Text_time," Time = "+Str(a))
If var$ = "stop"
Break
EndIf
Next
SetGadgetText(#Text_time," Time = "+Str(a)+Chr(13)+"Thread stoppé!")
EndProcedure
If OpenWindow(#Win, 0, 0, 300, 100, "Thread", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) <> 0
ButtonGadget(#btn_go,10,20,80,25,"Démarrer"):GadgetToolTip(#btn_go,"Lancer le Thread")
ButtonGadget(#btn_stop,10,50,80,25,"Stopper"):GadgetToolTip(#btn_stop,"Forcer l'arrêt du Thread")
TextGadget(#Text_time,100,20,190,60,"",#PB_Text_Border|#PB_Text_Center)
SetGadgetColor(#Text_time,#PB_Gadget_BackColor,RGB(23, 33, 41))
SetGadgetColor(#Text_time,#PB_Gadget_FrontColor,RGB(189, 193, 200))
If LoadFont(3,"Courier new",9,#PB_Font_HighQuality|#PB_Font_Bold)
SetGadgetFont(#Text_time,FontID(3))
EndIf
EndIf
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case #btn_go : var$ = "go" : CreateThread(@Thread_count(),0)
Case #btn_stop : var$ = "stop"
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
End
En effet c'est pratique, mais qu'en serait-il d'une fonction telle que CopyDirectory() dans la procédure?
Comment savoir qu'elle est en cours ou terminée pour faire le break en cas d'appui sur "Stop" par exemple?
Prenons cet exemple de procedure pour le thread :
Code : Tout sélectionner
Procedure ThreadCopier(*param)
Dossier1$ = "Mondossier 1"
Dossier2$ = "Mondossier 2"
CopyDirectory(Dossier1$, Dossier2$+"\", "*.*", #PB_FileSystem_Recursive|#PB_FileSystem_Force)
EndProcedure
Comment arrêter le thread si le dossier à copier fait plusieurs Go et qu'on veut pas attendre ??
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.