Gros problème avec les threads et la lecture des fichiers..

Sujets variés concernant le développement en PureBasic
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Gros problème avec les threads et la lecture des fichiers..

Message 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 :)
Ombres
Messages : 51
Inscription : sam. 24/janv./2004 12:46
Contact :

Message 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)...
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message 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
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message 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 :D
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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.

:)
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

La demande du ReadString(#) a été faite ... plus qu'à prier pour qu'elle arrive bientôt.
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message 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
:)
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

A mon sens c'est propre ..
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message 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.
Répondre