While Not EOF(F) dans Thread

Résolu
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 - 29 avril 2012 à 10:36
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 - 1 mai 2012 à 17:27
Bonjour

J'ai un souci avec la détection d'une Fin de lecture de fichier dans un Thread:

1. Code qui marche :
Je détecte la Fin du parcours de Fichier avec le compteur Interne

procedure TMyThread4.Execute;
var
  F        : TextFile;
  L        : String;
  FinTrait : Boolean;
begin
  {initialisations locales}
  ...
  FinTrait   := False;  
  FMessage   := 'Traitement Long en cours...';
  Synchronize(AfficherMessage);
  
  {DEBUT TRAITEMENT LONG}
  {1. Transfert du Fichier dans une TList...}
   ...
   Try
    AssignFile(F,FicTest);
    Reset(F);
    While Not FinTrait and Not Terminated do
    begin
      Read(F,L);
      Inc(FCount);
      ListLignesFic.Add(L);
      ...
      Synchronize(AfficherProgression);
      if FCount > FMaxCount then FinTrait := True;
    end;
    ...
    FMsgLog := '  - Fichier Trié';
    Synchronize(AffichageMemoLog);
  Finally
    CloseFile(F);
  End;
end;


2. Code qui ne marche pas
Détection classique de Fin de fichier par EOF(F) en remplacement du Booléen précédent Fin Trait
procedure TMyThread4.Execute;
var
  F        : TextFile;
  L        : String;
begin
  {initialisations locales}
  ...
  FMessage   := 'Traitement Long en cours...';
  Synchronize(AfficherMessage);
  
  {DEBUT TRAITEMENT LONG}
  {1. Transfert du Fichier dans une TList...}
   ...
   Try
    AssignFile(F,FicTest);
    Reset(F);
    While Not EOF(F) and Not Terminated do
    begin
      Read(F,L);
      Inc(FCount);
      ListLignesFic.Add(L);
      ...
      Synchronize(AfficherProgression);
    end;
    ...
    FMsgLog := '  - Fichier Trié';
    Synchronize(AffichageMemoLog);
  Finally
    CloseFile(F);
  End;
end;


Le Thread continue sa progression sur Inc(FCount) et ne s'arrête jamais.
J'ai donc l'impression que le EOF n'est pas pris en compte par le Thread Créé.

Question:
1. Dans ce cas, comment se prémunir d'une éventuelle erreur de lecture au delà de la fin de fichier.
Ce qui est bizarre, c'est que mon compteur continue bien au-delà de la valeur du fichier mais ne produit pas d'erreur
2. Ma préférence serait de mettre ma boucle de lecture de Fichier dans la Fiche et d'envoyer au thread, les variables dont il a besoin pour l'affichage. mais je ne sais pas si c'est valable ...

Je progresse mais pas facile à maitriser ces threads... Merci pour vos éclairages.




Jean_Jean
A voir également:

9 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
30 avril 2012 à 15:22
Salut,

j'ai testé et en changeant:
  L        : string;


en
  L        : char;


ça fonctionne très bien .. enfin chez moi testé sous D7 & D2009
mais à ta place j'utiliserai les Streams et non AssignFile !!


[hr]@+Cirec
[hr]
3
Rejoignez-nous