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

Threads & Processus C++ Discussion :

Thread et DLL


Sujet :

Threads & Processus C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 57
    Points
    57
    Par défaut Thread et DLL
    Bonjour,

    je souhaite concevoir une dll contenant plusieurs fonction qui sont utiliser dans plusieurs thread.

    j'ai donc créer ma dll et créer mes fonctions dans .h, j'ai ensutie créer mes different thread qui utilise ces fonctions.

    Ma dll est ensuite appellé dans un programme qui appelea ces thread.



    J'espere que j'ai été clair,


    Ma question est est ce que c'est une utilisation correcte des dll et des thread ?

    Merci pour vos réponses,

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par adurandet Voir le message
    Bonjour,

    je souhaite concevoir une dll contenant plusieurs fonctions qui sont utilisées dans plusieurs threads.
    OK.

    Citation Envoyé par adurandet Voir le message
    j'ai donc créé ma dll et créé mes fonctions dans .h
    AIE!
    Erreur. On ne crée pas de fonctions dans un fichier d'en-tête.
    On les déclare dans le fichier d'en-tête et on les définit dans un fichier .cpp de la DLL.

    Citation Envoyé par adurandet Voir le message
    j'ai ensutie créé mes differents threads qui utilisent ces fonctions.
    Que veux-tu dire par là ?
    Les threads sont créés à l'exécution, pas à l'écriture du programme...

    Citation Envoyé par adurandet Voir le message
    Ma dll est ensuite appellée dans un programme qui appelera ces threads.
    J'ai du mal à comprendre.
    Tes appels à la fonction de création de thread, ils sont dans la DLL ou le programme utilisateur ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    Excuse moi je me suis mal exprimé aussi bien pour les explications que pour les fautes d'orthographes.

    Je recommence.

    Tout d'abord je précise que je travaille avec Borland C++builder6.0Entreprise.

    J'ai donc créé une DLL, grâce à Nouveau->Autres->Expert DLL.

    Dans cette DLL je vais créer des fonctions que je déclare dans l'entete (.h) et que je definis dans le .cpp de cette dll.

    ensuite je veux que mon programme appelle ces fonctions dans des Threads.

    Pour créer un thread j'ai vu qu'il fallait faire Nouveau->Autre->Objet Thread.
    Ce que j'ai fais dans mon projet de DLL (c'est ici que je me demande si c'est correct?!)
    Cela créer une class Nom_de_mon_thread dependant de TThread avec une fonction Execute. La declaration des fonctions de la classe se trouve dans une fichier .h et leur definiton dans un fichier .cpp. Le tout est dans mon projet DLL.

    Dans cette fonction execute je comptais placer les fonctions que j'avais definit précédement dans ma DLL.


    Et donc pour finir, je lie (ou inclut ou indique, je sais pas trop comment on dit enfaite ) la dll à un projet. Ce projet fait appelle à certains fonction de la dll (tout est normal pour ça ) et fait aussi appel à la fonction thread::Execute qui fait apelle à mes autres fonctions.

    et je me demandais si tout ceci etait corect ?



    J'espere que j'ai été plus clair. Je suis désolé si je n'ai aps employé les bons termes, je mélange encore un peu tout.
    Et désolé aussi pour les fautes d'orthographes, le français s'est pas mon fort. et certains me diront : "apparement, la programmation n'ont plus!".

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    OK.
    Ici, le terme "thread" est utilisé par Borland pour désigner "Classe dont une méthode spécifique sera appelée dans un thread séparé pour chaque objet".

    je ne connais pas beaucoup Borland, mais je suppose que tu dois avoir une classe dérivée de TThread, qui implémente une méthode virtuelle (voire virtuelle pure) Execute().
    Cette méthode ne crée pas le nouveau thread. Elle est appelée dans le nouveau thread après sa création.

    Ce qui est sûr, c'est que tu ne dois pas exposer directement ta classe dérivée de TThread, ou exposer une fonction qui ne sert qu'à lancer le nouveau thread avec l'objet que tu voulais. Ce n'est pas à une DLL de faire ça:
    • La DLL crée de nouveaux threads si c'est elle qui les utilise.
    • Si c'est ton programme utilisateur qui veut exécuter des fonctions de la DLL dans un nouveau thread, alors c'est à lui de créer sa(ses) classe(s) dérivée(s) de TThread, et d'appeler les fonctions de la DLL dans sa(ses) fonction(s) Execute().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    je ne connais pas beaucoup Borland, mais je suppose que tu dois avoir une classe dérivée de TThread, qui implémente une méthode virtuelle (voire virtuelle pure) Execute().
    Cette méthode ne crée pas le nouveau thread. Elle est appelée dans le nouveau thread après sa création.
    Oui c'est ça! Comme je disais, Borland crée la Nom_de_mon_thread dérivée de la classe TThread. Et cette classe Nom_de_mon_thread il y a une fonction execute.

    Citation Envoyé par Médinoc Voir le message
    Ce qui est sûr, c'est que tu ne dois pas exposer directement ta classe dérivée de TThread, ou exposer une fonction qui ne sert qu'à lancer le nouveau thread avec l'objet que tu voulais. Ce n'est pas à une DLL de faire ça:
    Qu'entends tu pars exposer ?


    Citation Envoyé par Médinoc Voir le message
    • La DLL crée de nouveaux threads si c'est elle qui les utilise.
    • Si c'est ton programme utilisateur qui veut exécuter des fonctions de la DLL dans un nouveau thread, alors c'est à lui de créer sa(ses) classe(s) dérivée(s) de TThread, et d'appeler les fonctions de la DLL dans sa(ses) fonction(s) Execute().
    Ok malgrè quelque incompréhension, je pense avoir saisi.

    je vais créer mes différentes class et fonction dans ma dll.
    Dans mon programme je ferais appelle à la dll et lorsque mon programme fera appelle à mes fonction je le ferais grâce à des thread pour ne pas bloquer mon programme.


    merci de tes eclaircissement !

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Qu'entends tu pars exposer ?
    Je me suis trompé de mot, j'aurais du dire "exporter".

    Les fonctions exportées par une DLL sont les fonctions visibles pour les programmes qui utilisent la DLL. Les fonctions internes de la DLL ne sont généralement pas exportées, car les programmes n'ont pas à y toucher.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    OK, merci beaucoup !


    Probleme resolu !

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/05/2014, 15h22
  2. [Langage/Algorithme] [CodeGuard]Thread et DLL : problème de #define
    Par ShaiLeTroll dans le forum C++Builder
    Réponses: 3
    Dernier message: 15/12/2011, 10h12
  3. Threading et dll
    Par knuck dans le forum Développement Windows
    Réponses: 1
    Dernier message: 24/01/2011, 15h45
  4. Thread et dll externe
    Par SniP_78 dans le forum Windows Forms
    Réponses: 18
    Dernier message: 28/07/2009, 11h21
  5. Thread et dll sous XP
    Par _ky_ dans le forum Windows
    Réponses: 7
    Dernier message: 21/06/2007, 02h47

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