IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

comment initialiser propriété Tstringlist d'un thread ?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Delphi , Vb .net SQL server
    Inscrit en
    Juillet 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Delphi , Vb .net SQL server
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2015
    Messages : 9
    Par défaut comment initialiser propriété Tstringlist d'un thread ?
    Bonjour ,

    j'aurais besoin de votre avis sur ce bout de code qui recopie des valeurs de mon Form Main dans les propriétés de mon thread

    si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       L1 := TStringList.Create;
       try
     
          for i := 0 to Listview1.Items.Count  - 1 do
               begin
                  L1.Add(Listview1.Items.Item[i].Caption );
               end;
               monThread.ListNames:=L1;
       finally
         L1.Free;
       end;
     
      monThread.Suspend;
      monThread.Resume;
    Avec le code ci dessus le thread se lance avec un Tstringlist ListNames qui est vide , ce qui fait planter.


    alors je modifie le code par ceci et ça semble marcher mais je ne suis pas sûr d'avoir pris la bonne décision


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
       if assigned(L1) then freeandnil(L1);
       L1 := TStringList.Create;
       try
     
          for i := 0 to Listview1.Items.Count  - 1 do
               begin
                  L1.Add(Listview1.Items.Item[i].Caption );
               end;
               monThread.ListNames:=L1;
       finally
         //L1.Free;
       end;
     
      monThread.Suspend;
      monThread.Resume;
    votres avis s.v.p ?

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Delphi , Vb .net SQL server
    Inscrit en
    Juillet 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Delphi , Vb .net SQL server
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2015
    Messages : 9
    Par défaut
    je pense avoir trouvé , dans les codes ci dessus je travaillais par référence , il est préférable de travailler avec des copies :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       L1 := TStringList.Create;
       try
     
          for i := 0 to Listview1.Items.Count  - 1 do
               begin
                  L1.Add(Listview1.Items.Item[i].Caption );
               end;
               monThread.ListNames.Assign(L1);
       finally
         L1.Free;
       end;
     
      monThread.Suspend;
      monThread.Resume;

  3. #3
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    j'ajouterais que si le Thread manipule ListNames il va falloir protéger sa modification par un section critique par exemple.

    après la logique n'est peut-être pas bonne mais hors contexte c'est difficile à dire.

    par exemple, j'ai un projet dans lequel un Thread traite une liste, l'application possède aussi une liste, et quand le thread à terminé de traiter sa liste il utilise Synchronize pour récupérer les nouveaux éléments.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/03/2013, 22h21
  2. Réponses: 14
    Dernier message: 11/07/2008, 13h09
  3. Réponses: 2
    Dernier message: 29/11/2006, 11h52
  4. Comment initialiser une ChildFrame ???
    Par loupdeau dans le forum MFC
    Réponses: 14
    Dernier message: 22/03/2005, 13h28
  5. Comment initialiser un vector à sa création ?
    Par Clad3 dans le forum SL & STL
    Réponses: 7
    Dernier message: 10/12/2004, 15h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo