J'avoue que j'ai du mal a comprendre un certain nombre de chose avec les Threads ! Malgré les exemples trouvé je comprends rien au Mutex et au Semaphore...
J'arrive a utiliser les Threads, mais je sais pas si je risque ou pas d'avoir un jour un problème de synchro lecture ecriture
;J'ai une liste qui va contenir des infos
Global Newlist Info.s()
;J'ai une procédure qui permet d'aller chercher ces infos sur le web.... mais ça peut être plus ou moins long
Procedure ReadNetworkInfo(a.l)
;J'attends des infos qui viennent d'un flux RSS
ClearList(Info())
for z=0 to NbInfotrouve
AddElement(Info())
Info()=Innfotrouve(z)
Next
Endprocedure
;Comme je ne veux pas bloquer mon programme pendant l'arrivé des infos des fois c'est curieusement long je créer un Thread
CreateThread(@ReadNetworkInfo(),0)
;Ma boucle principal qui affiche des trucs a l'ecran
Repeat
;Affichage des infos de la liste qu'elle soit complète ou nom !
Foreach Info()
;Affichage sur l'ecran du contenu de la list Info
Next
Flipbuffer()
Until Quit=1
Est-ce bien comme ça qu'il faut faire ou faut il utiliser les Mutex/Semaphore pour éviter que la boucle principal lise la liste en même temps que le Thread ne l'écrit ?
si c'est le cas comment faire ?
en gros si le code principal a verrouille le mutex, le thread doit attendre car la liste chainée est utilisé
et vice versa, si la liste chainée verrouille le mutex, elle utilise la liste chainée, donc le prog principal doit attendre avant de pouvoir utilisé la liste chainée
;J'ai une liste qui va contenir des infos
Global NewList Info.s()
Global Mutex
;J'ai une procédure qui permet d'aller chercher ces infos sur le web.... mais ça peut être plus ou moins long
Procedure ReadNetworkInfo(a.l)
;J'attends des infos qui viennent d'un flux RSS
LockMutex(Mutex)
ClearList(Info())
For z=0 To NbInfotrouve
AddElement(Info())
Info()=Innfotrouve(z)
Next
UnlockMutex(Mutex)
EndProcedure
;Comme je ne veux pas bloquer mon programme pendant l'arrivé des infos des fois c'est curieusement long je créer un Thread
Mutex = CreateMutex()
CreateThread(@ReadNetworkInfo(),0)
;Ma boucle principal qui affiche des trucs a l'ecran
Repeat
;Affichage des infos de la liste qu'elle soit complète ou nom !
LockMutex(Mutex)
ForEach Info()
;Affichage sur l'ecran du contenu de la list Info
Next
UnlockMutex(Mutex)
Flipbuffer()
Until Quit=1
FreeMutex(Mutex)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
merci beaucoup je commence a comprendre le coup des mutex.
la variable mutex ça doit être un .i ? un .l ou bien un .b suffit ?
Et tant que j'y suis les sémaphores ça ne sert pas a la même chose ? !
j'utilise des variables globales pour communiquer avec mes threads
En gros, il faut simplement faire attention à tous ce qui s'indexe en auto, donc les strings (ça c'est l'option threadsafe dans le compiler) et les listes chainée ou assimilés.
Ensuite, il y a certain particulier comme dessiner sur une image
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu a écrit :moi, je mets un .l sous 32bit
les sémaphore, je n'ai jamais utilisé
j'utilise des variables globales pour communiquer avec mes threads
En gros, il faut simplement faire attention à tous ce qui s'indexe en auto, donc les strings (ça c'est l'option threadsafe dans le compiler) et les listes chainée ou assimilés.
Ensuite, il y a certain particulier comme dessiner sur une image
Merci beaucoup pour ce complément d'information. Je me sens beaucoup plus alaise avec les Thread et les mutexs !