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 :

MultiThread et Composants globaux


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Par défaut MultiThread et Composants globaux
    Bonjour,

    Je travaille sur une application multithread, dont les différents threads ont besoin de se connecter à une base de données.
    Pour éviter tout conflit, chaque thread a sa propre connexion à la base de données.
    Les threads peuvent créer des objets, qui doivent connaitre la connexion pour pouvoir effectuer des opérations dans la base de données.
    Actuellement, nous passons l'information de connexion à chaque objet, pour être sûr qu'il utilise bien la connexion de son thread.

    Existe-t-il une meilleur solution ?
    C'est à dire, est ce que je peux créer une connexion pour un thread, stocker l'information quelque part, pour que tous les objets créés par le thread (et bien sûr les objets créés par les objets précédents...), puissent utiliser la connexion correspondant à leur thread respectif ?

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 100
    Par défaut
    Suffit de faire une property à ton objet thread, je ne vois pas trop le sens de la question !
    C'est juste la bonne utilisation des instances des objets

    tu peux aussi faire une threadvar mais c'est moins propre
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Par défaut
    La propriété est utilisable que si un objet connait le thread dans lequel il a été créé.
    Il ne me semble pas que l'on puisse retrouver le thread qui a créé un objet à partir de l'objet.
    Et je voudrais que mon objet soit également utilisable dans le thread principal.

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 100
    Par défaut
    Encore une fois, une simple propriété dans l'objet pour le lier à son thread parent
    ou alors faire un Dictionnary<thread, objet> ou Dictionnary<objet, thread> selon tes besoins

    Tout ça ce n'est que de la structuration POO de ton code, tu n'en donnes pas assez pour que l'on t'indique une méthode que l'on pense appropriée
    J'ai l'impression qu'il y a un problème d'isolation et de couplage dans ton code
    Il ne faut pas hésiter à faire des classes intermédiaires qui joue le rôle d'Adapter ou de Pont entre plusieurs objets pour les lier.

    Je commencerais par mettre en place une Factory qui instancie les objets lié à la DB, la factory utilisant une Registry pour stocker ses connexions, par exemple Dictionnary<ThreadID, Connexion>
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Invité
    Invité(e)
    Par défaut
    Si tu as toujours la même connexion, tu peux utiliser un Singleton.
    Soit tu set la connexion à tes thread soit ils vont la récupérer, tu peux aussi surcharger le Create pour lui passer.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Par défaut
    Effectivement, j'ai certainement un problème d'isolation, actuellement pour chaque objet qui a besoin d'accéder à la base de données, je lui transmet les informations de connexion à sa création, ce qui est un peu lourd.
    Je vais regarder du côté des dictionnaires, mais j'utiliserai plutôt un Dictionnary<ThreadId, Connexion>.

Discussions similaires

  1. [WPF][MultiThreading/Composants] Petit probleme de conception ?
    Par chico200987 dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 15/08/2010, 19h02
  2. Réponses: 1
    Dernier message: 23/06/2002, 00h15
  3. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10
  4. Installer ses composants
    Par Geronimo dans le forum C++Builder
    Réponses: 14
    Dernier message: 18/06/2002, 14h51
  5. Re-dimensionnement automatique de composants
    Par ludo_7 dans le forum C++Builder
    Réponses: 10
    Dernier message: 16/05/2002, 16h35

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