Page 1 sur 1
Gros problème avec les threads et la lecture des fichiers..
Publié : sam. 19/juin/2004 9:20
par julien
Salut,
La j'ai un problème avec un code qui lis 2 fichier en même temps avec des thread et qui les affiche dans un gadget.
Le problème c'est que le résultat est aléatoire,
Voici le lien vers le fichier source qui lis 2 fichier et les affiches. Ragardez bien le contenu du fichier de chaque fichier
http://heisspiter.no-ip.com/~julien/Pur ... Erreur.zip
Merci de votre aide

Publié : sam. 19/juin/2004 9:33
par Ombres
Normal que ca marche pas, ReadString() lit dans le fichier courant, comme tu lance le thread 2 en premier, il y a quelques "2" qui sont chargés puis quand le thread 1 commence, le fichier courant deviens le 1 et les 2 threads chargent du fichier 1 (pour ca qu'il y a des "1" partout apres)...
Publié : sam. 19/juin/2004 9:43
par fweil
En principe il faudrait rajouter un UseFile(res) avant les ReadString().
Je ne suis pas certain que les erreurs disparaîtront pour toujours, mais cela peut suffire.
Slts
Publié : sam. 19/juin/2004 9:47
par julien
Ok, je pensai que la commande Readstring() lisez uniquement dans le fichier ouvert précedement et que c'était comme pour les variables dans les procedures... indépendant...
Il faudrai une commande en option du genre ReadString(id_du fichier ouvert)
Merci beaucoup

Publié : sam. 19/juin/2004 9:51
par nico
Même en modifiant, on ne peut être sûr du résultat, j'ai bien les deux fichiers chargés mais toujours une petite erreur qui se glisse.

Publié : sam. 19/juin/2004 9:59
par fweil
La demande du ReadString(#) a été faite ... plus qu'à prier pour qu'elle arrive bientôt.
Publié : sam. 19/juin/2004 10:06
par julien
Merci de votre aide, je galéré sur ce problème depuis hier, et je ne trouverai pas le problème.
Pour le moment je vais faire comme ceci
Code : Tout sélectionner
Procedure charge()
lire2()
lire1()
EndProcedure
CreateThread(@charge(),0)
Je ne sais pas si c'est bien "propre" (source d'erreur ?) comme programation mais ça marche

Publié : sam. 19/juin/2004 10:07
par fweil
A mon sens c'est propre ..
Publié : sam. 19/juin/2004 10:18
par hardy
Peut-être qu'il n'y aurait plus de problème en utilisant lof et fileseek dans les procédures (évidemment, usefile est indispensable): dans chaque proc tu crées une var locale pos. après le readstring, tu fais pos=loc()
avant le readstring, tu fais fileseek(pos).
Mais ça dépend. le pb, c'est que l'on ne sait pas quand le thread 1 passe la main au thread 2. ça pourrait être entre le readstring et le pos=loc().
Si tu veux entièrement sécuriser ça, faut mettre un mutex. Vite indispensable quand il y a plusieurs threads qui tournent en même temps.
Là, je dois sortir. En rentrant, si personne ne l'a fait entre temps, je mets un tuto "mutex" dans "débutant".
C'est tout bête, mais faut savoir.