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 :

Thread utile ou pas?


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 21
    Points : 12
    Points
    12
    Par défaut Thread utile ou pas?
    bonjour à tous,
    voila, je suis en train de créer une interface pour recuperer les infos d'un lecteur RFID qui est branché sur un port serie. Tout fonctionne pour le mieux jusqu'a maintenant.
    Malheureusement, je desire réaliser une lecture en boucle. Dans un premier temps, je lancais ma fonction lecture dans une boucle, un petit refresh sur l'affichage du resultat et voila. Le seul probleme, c'est que je n'arrive pas arreter la boucle. J'ai essayé d'utiliser un click sur un bouton pour commander la fin de la boucle, mais le programme garde toujours la main (ce qui me semble normal).
    Donc, ma question est dans un premier temps: est ce qu'utiliser un thread est utile?
    si oui, alors comment faire pour passer des variables de mon unit principale a mon thread et inversement?
    merci a vous.
    ps: je peux mettre le code si besoin

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 576
    Points : 25 216
    Points
    25 216
    Par défaut
    tu peux faire appel a "application.processmessage()" régulièrement dans la boucle, et gérer une variable booléene globale pour arrêter la boucle

    sinon, tu peux faire un thread, cela éviterait les lenteurs de ton programme par contre, ne manipule pas les forms à partir du thread, et communique entre le thread principale et le thread RFID via une TThreadList (manipulé via LockList/UnLockList) contenant des pointeurs sur des record ... après faut que tu sois à l'aise avec les pointeurs, tu peux utiliser une structure variable (un case dans le record voir Windows.PLDTEntry comme exemple) pour stocker des données différentes selon l'occasion

    j'ai failli entré chez IER, il font du RFID, mais je n'aurais pas bossé dessus mais un progiciel de gestion logistique, ils avaient l'air trop obsédé par le TransacSQL, vu que je n'aime pas spécialement la BD, je n'ai pas eu besoin de refuser le poste, mon absence de niveau et de motivation concernant Transac m'a exclu direct

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    ok merci, je pense que je vais tenter le thread. ca me semble mieux.

  4. #4
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    comment tu accéd au port série?? avec composant (comport,..)?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Non, pour le port com. J'utilise la dll fournie par le constructeur du lecteur.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    ShaiLeTroll, tu n'aurais pas un exemple pour utiliser la tthreadlist... je ne trouve rien sur le net.
    Merci

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 576
    Points : 25 216
    Points
    25 216
    Par défaut la ThreadList comment ça marche
    je n'ai pas d'exemple, je vais te mettre des extrait de codes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         // - Liste d'attente des Messages en Attente
         TreatMessageThreadLst := TThreadList.Create();
         TreatMessageThreadLst.Duplicates := dupAccept;
    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
    16
    var
       PhysicalStateData : _STRUCT_RTXTOOAM_BINSTATUS;
       DataSegment : _STRUCT_SEGMENT_DATA;
       pSimMessage : ^_STRUCT_MESSAGE;
    begin
    ... 
     
      // Remplissage de l'enveloppe
      New(pSimMessage); // Allocation de la mémoire pour un nouveau pointeur
      pSimMessage^.Envelope.cSom := START_OF_MESSAGE;
      pSimMessage^.Envelope.byClass := 0;
      ...
      pSimMessage^.Tail.byCKS := 0;
      pSimMessage^.Tail.byEOM := END_OF_MESSAGE;
     
      TreatMessageThreadLst.Add(pSimMessage); // Ajout de la Donnée à envoyer dans la liste d'attente d'envoi
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    with TreatMessageThreadLst.LockList() do begin
         try
            // La liste contient-elle un message ?
            FlagWork := Count >= 1;
            if FlagWork then begin
               // Récupération de la valeur indiquée par le pointeur dans une variable locale
               // Items[0] est le premier pointeur de la liste protégée
               // Items[0]^ est la valeur du premier pointeur
               // _STRUCT_MESSAGE(Items[0]^) est la première valeur transtypée sous la forme d'un _STRUCT_MESSAGE
               CurrentMessage := _STRUCT_MESSAGE(Items[0]^);
               try
                  SetLength(_STRUCT_MESSAGE(Items[0]^).Datas, 0);
               except
                     FichierLog('EXCEPT', 'SetLength à Zéro', Exception(ExceptObject()).Message);
               end;
               // Le Message est ENTIEREMENT recopié en Memoire dans CurrentMessage
               // On peut libérer le pointeur
               Dispose(Items[0]);
               // On peut supprimer le pointeur de la File d'Attente
               Delete(0);
            end;
         finally
                TreatMessageThreadLst.UnlockList();
         end;
    end; // with

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [bitdefender10]services utiles ou pas
    Par arfy dans le forum Sécurité
    Réponses: 10
    Dernier message: 13/08/2007, 12h23
  2. [MySQL] Argument utile ou pas ?
    Par pc.bertineau dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/02/2007, 11h19
  3. java.util.Calendar pas supporté par CLDC
    Par rozwel dans le forum Java ME
    Réponses: 1
    Dernier message: 03/02/2007, 20h47
  4. [thread] synchronize ou pas ?
    Par dvarrel dans le forum Langage
    Réponses: 4
    Dernier message: 26/07/2004, 19h09

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