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

Langage Delphi Discussion :

Comportement Thread VLC


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut Comportement Thread VLC
    Bonjour tout le monde,

    j'ai appliquée cette méthode http://delphi.developpez.com/faq/?pa...-un-thread-VCL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TThreadLibCom := TLibComThread.Create(true);
          TThreadLibCom.Priority := tpHighest;         // Thread of high priority.  // Force closure
          TThreadLibCom.Resume;
          i_confirm := MessageDlg(SHSL_Site_RetrieveConfigFinished,mtInformation, [mbOk], 0); // si j'enlève cette ligne la fermeture du thread ne se fait pas correctement
          TThreadLibCom.Terminate;
          ExitCode := TThreadLibCom.WaitFor;
    j'ai un comportement que je n'arrive pas à expliquer dans mon code, comme vous pouvez voir dans le code ci-dessus, je créé mon Thread puis Terminate etc .. la chose est que si j'enlève la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    i_confirm := MessageDlg(SHSL_Site_RetrieveConfigFinished,mtInformation, [mbOk], 0);
    , la méthode Execute de mon Thread n'est pas appelée et du coup mon thread ne sert à rien, je suppose que le MessageDlg y est pour quelque chose.

    Vous voyez une solution ?

    merci

  2. #2
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    Bonjour,

    Dans ton code, tu exécutes le thread et tu le stoppes aussitôt.
    Je ne sais pas ce que tu cherches à faire mais si tu veux éviter l'affichage du message, essaie de le remplacer par un sleep(100) par exemple.
    D'autre part, lorsque tu appelles le constructeur Create tu passes le paramètre CreateSuspended à true ce qui veut dire que ton Thread n'est pas exécute à la création. Tu peux aussi essayer de mettre false à la place de True.


    Franck

  3. #3
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    Salut franckcl,

    en fait je fait juste en sorte de stopper une dll que j'appelle, et donc je stoppais le thread pour ajouter mettre la Priority en "haute", voici mon code Execute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TLibComThread.Execute;
    begin
      MainForm.PC.ClosePortLIBCOM();
      MainForm.PC.DestroyLibCom();
      { Placez le code du thread ici }
    end;
    Donc en effet avec un sleep de 300 et évitant de stopper le thread à sa création, j'arrive à passer par toutes les méthodes que je voulais.
    On va laisser cela comme ça du coup ^^.

    Merci à toi.

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Citation Envoyé par phoenixgreg Voir le message
    On va laisser cela comme ça du coup ^^.
    Du coup, le thread ne sert plus à rien (il ne servirait de toute façon à rien du fait du WaitFor).
    Il manque aussi la libération de l'objet TLibComThread.

    Sinon, es-tu sûr qu'il soit thread-safe ce composant ?

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Du coup, le thread ne sert plus à rien (il ne servirait de toute façon à rien du fait du WaitFor).
    C'est vrai, mais le plus grave c'est le fait que phoenixgreg doit serrer les fesses pour espérer que la libération du port COM et la fermeture de la DLL se fasse en moins de 300 millisecondes

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Citation Envoyé par foetus Voir le message
    mais le plus grave c'est le fait que phoenixgreg doit serrer les fesses pour espérer que la libération du port COM et la fermeture de la DLL se fasse en moins de 300 millisecondes
    Non. Le seul problème serait si le thread n'avait toujours pas démarré après 300 ms (on retombe sur le problème original).
    Une fois qu'il a démarré, Terminate ne sert plus à rien (il n'y a pas de boucle), OnExecute ira normalement à son terme et la tâche principale sera bloquée pour une durée indéterminée jusqu'à ce que WaitFor soit libéré

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

Discussions similaires

  1. [WD17] Synchronisation de threads avec signaux, comportement bizarre
    Par droliprane dans le forum WinDev
    Réponses: 7
    Dernier message: 08/10/2014, 18h57
  2. Réponses: 7
    Dernier message: 03/07/2009, 13h45
  3. Question sur le comportement des threads
    Par Krishna dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 12/01/2009, 21h56
  4. Comportement thread mal compris
    Par peter27x dans le forum Langage
    Réponses: 2
    Dernier message: 03/11/2008, 10h10
  5. question sur le comportement des threads
    Par rose-bonbon dans le forum CORBA
    Réponses: 4
    Dernier message: 27/10/2004, 18h00

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