Page 1 sur 1

Appel de procedure dans une thread : conséquence ?

Publié : lun. 07/nov./2005 8:49
par olivier
J'appel des procedures à partir d'une thread.

Est ce dangereux ? Ou cela ne pose aucun problème ?

Publié : lun. 07/nov./2005 9:47
par lionel_om
No pb... :D

Publié : lun. 07/nov./2005 11:55
par LavaLava
Il n'y à pas de problème ...
mais il ne faut pas qu'une procedure soit appelé par le prog principal et la thread en même temps !
sinon risque bug ... (conflit de variable, d'accés fichier,...)

Publié : lun. 07/nov./2005 13:30
par lionel_om
LavaLava a écrit :Il n'y à pas de problème ...
mais il ne faut pas qu'une procedure soit appelé par le prog principal et la thread en même temps !
sinon risque bug ... (conflit de variable, d'accés fichier,...)
A bon ???
Je ne suis pas daccord...

Publié : lun. 07/nov./2005 17:29
par Dr. Dri
si si, problèmes de réentrance... ca peut se résoudre avec une variable statique et un code d'erreur par exemple...

Dri ;)

Publié : lun. 07/nov./2005 17:48
par LavaLava
Note: Les threads doivent être utilisés avec précaution, car il est possible que des ressources partagées (mémoire, fichiers, variables etc..) soient accédées au même moment ce qui causera des resultats aléatoires. Par exemple, il n'est pas possible de manipuler des chaines de caracteres dans differents threads au même moment, car un seul buffer est disponible pour leur gestion dans PureBasic. Il faut donc prendre des mesures (a l'aide de mutexs) pour eviter ce genre de situations. Par contre, la lecture des chaines de caractere ne pose pas de probleme.
Ce paragrphe est extrait de la doc de pb sur les threads ...
Le fait d'appeler une procedure depuis un thread ne crée pas de bug.
Dans mon premier post, j'ai repondu un peu vite car j'ai eu une mauvaise experience à ce sujet ...
dans un prog, le main et son thread pouvaient appeler la même routine pour recolter des infos sur un fichier : Quand cela arrivait => plantage ...

Publié : lun. 07/nov./2005 21:34
par LeCyb
Je suis pas dieu pour les threads mais je m'y intéresse assez pour te donner quelques conseils:

1) Tant que la V4 de PB n'est pas sortie n'utilise pas de chaînes dans les threads
2) Déclare tes variables en Protected dans les threads et procédures
3) Jamais de Global, Shared ou autre
4) Si tu veux quand même partager des données faut faire joujou avec les mutex
5) Ne pas faire joujou avec les interfaces graphiques (gadgets et fenêtres) dans les threads

En soi l'utilisation de procédures ne pose absolument aucun problème dans un thread, c'est ce que tu fais dans la procédure qui pourrait poser problème (gadgets, fichiers, chaînes etc...).