Page 1 sur 1
les thread
Publié : mar. 06/juil./2010 13:55
par dayvid
pourquoi quand je crée une fenètre avec des gadget + les boucles qui vont avec
et que je lance sa avec un thread, il se coupe directe alors que la boucle ne doit pas se terminer
je sais que ont peut utiliser waitthread mais c'est pas ce qui me faut car
si faut que le programme principale continue en même temps
je ne comprend vraiment rien la, je suis québlo
Re: les thread
Publié : mar. 06/juil./2010 13:59
par SPH
Donne un code pour voir
Re: les thread
Publié : mar. 06/juil./2010 15:40
par Cls
Pour corriger, il faut comprendre ce que sont les threads. Ce sont des petites routines de ton programme principal, exécutées en parallèle de manière asynchrone (il est possible de les synchroniser via des sémaphores). Les threads permettent d'effectuer des opérations non bloquantes en parallèle les unes des autres.
Ce qu'il faut savoir, c'est que ces threads sont des fils du programme principal : si le programme ayant lancé le thread se termine, le thread se coupe également.
Concrètement voici un petit exexmple :
Code : Tout sélectionner
; Démonstration THREAD
; Auteur : Cls
; Version : 06 Juillet 2010
; Procédère permettant de créer et gérer une nouvelle fenêtre
Procedure CreateChildInterface(value)
Static nbChild : nbChild + 1; Variable commune à tous les threads utilisant cette fonction
windowId = OpenWindow(#PB_Any, 100, 200, 100, 30, "Child : " + Str(nbChild))
If windowId
btnFermer = ButtonGadget(#PB_Any, 0, 0, 100, 30, "Fermer enfant " + Str(nbChild))
EndIf
Quit.b = #False
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow : Quit = #True
Case #PB_Event_Gadget
If EventGadget() = btnFermer
CloseWindow(windowId)
EndIf
EndSelect
Until Quit = #True
EndProcedure
; Ouvre l'ecran principal
windowId = OpenWindow(#PB_Any, 100, 100, 200, 30, "Test Thread")
If windowId
btnAjout = ButtonGadget(#PB_Any, 0, 0, 200, 30, "Ajouter fenêtre enfant")
EndIf
; Boucle des évenement principales
Quit.b = #False
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow : Quit = #True
Case #PB_Event_Gadget
If EventGadget() = btnAjout
CreateThread(@CreateChildInterface(), 1)
EndIf
EndSelect
Until Quit = #True
Tu peux ajouter autant de fenêtre enfant que tu le souhaites, chacune est gérée séparément. Par contre, si tu fermes la fenêtre parent, toute les autres fenêtres sont détruites également.
Re: les thread
Publié : jeu. 08/juil./2010 11:13
par dayvid
merci, je vais vous donner des éxemple pour que vous puissiez m'aider

Re: les thread
Publié : ven. 20/août/2010 15:10
par dayvid
sa sert a quoi des mutex, semaphore etc !
je ne connais rien a sa moi, pourquoi un tread lancer ce termine et avent même d'éxécuter la procedure "procedure name is not a procedure pointeur" ou un truc comme sa quoi
moi je crée une fenêtre et tout ce qui va avec pour la gérer corectement, je met sa dans un thread et quand je le lance, rien, la procedure n'est même pas éxécuter et si elle est sa quitte
alors que la boucle n'est même pas terminer "enfin je croix"
j'ais besoin d'aide pour comprendre comment sa marche et des exemple aussi SVP
je sait utiliser plus ou moins les thread mais c'est loins d'être simple