Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1536 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Singleton et bibliothèque dynamique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Singleton et bibliothèque dynamique

n°2013169
Riot
Buy me a riot
Posté le 30-07-2010 à 12:26:35  profilanswer
 

Bonjour,
 
J'ai une classe singleton qui me permet d'écrire des logs dans une console.
Dans mon appli je charge dynamiquement du code (dll), et cette dll écrit des choses via la classe de log.
Le problème est que ce code chargé dynamiquement crée une nouvelle instance de mon singleton, au lieu d'utiliser celle déjà existante.
 
Y a-t-il moyen de régler ce problème ?


---------------
Be the one with the flames.
mood
Publicité
Posté le 30-07-2010 à 12:26:35  profilanswer
 

n°2013185
Joel F
Real men use unique_ptr
Posté le 30-07-2010 à 13:56:48  profilanswer
 

ne pas utiliser de singleton. c'ets l'anti-pattern absolu qui ne résout jamais rien.

n°2013199
Riot
Buy me a riot
Posté le 30-07-2010 à 14:24:31  profilanswer
 

Ok, tu aurais une piste pour faire ce que je veux ?


---------------
Be the one with the flames.
n°2013207
Un Program​meur
Posté le 30-07-2010 à 14:47:47  profilanswer
 

Joel F a écrit :

ne pas utiliser de singleton. c'ets l'anti-pattern absolu qui ne résout jamais rien.


 
C'est l'exemple canonique du pattern dont certains abusent, je suis d'accord.  Mais anti-pattern absolu me semble trop fort.  Surtout dans ce contexte qui est un des cas ou le singleton a du sens (meme si personnellement j'ai tendance a proposer une API avec une classe monostate ou meme simplement procedurale plutot que d'exposer le singleton qui se trouve eventuellement derriere)
 

Riot a écrit :

Ok, tu aurais une piste pour faire ce que je veux ?


 
Sans voir ton code, c'est difficile de trouver la cause.  En prime, suivant comment tu implementes le singleton les differences entre DLL de Windows et objets partages d'Unix entrent peut-etre en jeu et je connais mal Windows.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°2013213
Riot
Buy me a riot
Posté le 30-07-2010 à 14:55:37  profilanswer
 

Un Programmeur a écrit :

Sans voir ton code, c'est difficile de trouver la cause.  En prime, suivant comment tu implementes le singleton les differences entre DLL de Windows et objets partages d'Unix entrent peut-etre en jeu et je connais mal Windows.


Je code sous Windows effectivement, et le code de mon singleton est vraiment basique, du genre :
 

Code :
  1. // decl
  2.     class Log
  3.     {
  4.     public:
  5.       static Log* getInstance();
  6.       static void destroy();
  7.       void write( const std::string& );
  8.    
  9.     private:
  10.       static Log* p_instance;
  11.    
  12.       Log();
  13.       ~Log();
  14.     };
  15.    
  16.     // impl
  17.     Log* Log::p_instance = 0;
  18.    
  19.     Log* Log::getInstance()
  20.     {
  21.       if( !p_instance )
  22.         p_instance = new Log();
  23.       return p_instance;
  24.     }
  25.    
  26.     void Log::destroy()
  27.     {
  28.       if( p_instance )
  29.         delete p_instance;
  30.     }
  31.     void write( const std::string& msg )
  32.     {
  33.       std::cout << msg << std::endl;
  34.     }
  35.    
  36.     Log::Log()
  37.     {
  38.     }
  39.    
  40.     Log::~Log()
  41.     {
  42.     }


Message édité par Riot le 30-07-2010 à 14:56:16

---------------
Be the one with the flames.
n°2013219
Un Program​meur
Posté le 30-07-2010 à 15:16:44  profilanswer
 

Si le code suivant impl est dans un CPP et linke qu'une fois, je ne vois pas de probleme.  (Il me semble me souvenir, mais je peux me tromper, que ca implique sous Windows qu'il soit dans une DLL a part du programme principal et de la DLL chargee dynamiquement et qu'il faut aussi une serie d'annotation pour que les fonctions publiques soient bien exportees -- sous Unix en general tout est exporte par defaut)


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°2013279
Riot
Buy me a riot
Posté le 30-07-2010 à 18:27:46  profilanswer
 

Merci beaucoup, ça fonctionne. Mon Logger était compilé dans une lib statique. :jap:


---------------
Be the one with the flames.
n°2013366
el muchach​o
Comfortably Numb
Posté le 31-07-2010 à 13:44:00  profilanswer
 
n°2013477
Riot
Buy me a riot
Posté le 02-08-2010 à 09:19:19  profilanswer
 

Intéressant, je note !


---------------
Be the one with the flames.
n°2017811
Glock 17Pr​o
Posté le 18-08-2010 à 23:53:10  profilanswer
 

Joel F a écrit :

ne pas utiliser de singleton. c'ets l'anti-pattern absolu qui ne résout jamais rien.


comment gérer les classes ou l'on ne veut qu'une seule instance dans le programme , et où l'on souhaite y accéder à droite et à gauche ? le singleton
est tellement pratique dans ces cas là :/


---------------
.
mood
Publicité
Posté le 18-08-2010 à 23:53:10  profilanswer
 

n°2017822
Joel F
Real men use unique_ptr
Posté le 19-08-2010 à 07:59:07  profilanswer
 

tu veux une seule instance ? tu n'en crée que une.  
Tu veux l'utiliser à droite à gauche, et bien, les paramètres de fonctions/méthodes ne sont pas la pour rien.

n°2017828
Un Program​meur
Posté le 19-08-2010 à 08:51:30  profilanswer
 

Joel F a écrit :

tu veux une seule instance ? tu n'en crée que une.  
Tu veux l'utiliser à droite à gauche, et bien, les paramètres de fonctions/méthodes ne sont pas la pour rien.


 
Pour un logger?


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°2017829
Joel F
Real men use unique_ptr
Posté le 19-08-2010 à 08:53:22  profilanswer
 

comme je l'aideja dit (ici ou ailelurs je ne sais plus) , le logger c'ets bien le seul cas ou le singleton a peut etre un sens. Encore que pour moi, les logger j'aime bien en avoir diverses instacnes avec diverses réglages etc ...

n°2017837
Un Program​meur
Posté le 19-08-2010 à 09:43:26  profilanswer
 

Joel F a écrit :

comme je l'aideja dit (ici ou ailelurs je ne sais plus) , le logger c'ets bien le seul cas ou le singleton a peut etre un sens.


 
 
Les factories sont un autre cas.  Un gestionnaire de configuration aussi.
 
Si tu as un interpreteur embarque dans ton application, il est aussi souvent unique ou du moins il y en a un principal qui est reference un peu partout (meme si je ne concevrais pas un interpreteur comme singleton, je vois bien un singleton permettant d'y acceder).
 

Citation :

Encore que pour moi, les logger j'aime bien en avoir diverses instacnes avec diverses réglages etc ...


 
Je prefere un argument au log qui choisit une configuration nommee pour ca.  Entre autres parce que passer tes differentes instances configurees differemment un peu partout est encore plus lourd que d'y passer un logger unique.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°2018202
Glock 17Pr​o
Posté le 20-08-2010 à 21:50:37  profilanswer
 

autrement dit en quoi le pattern est il l'atii pattern tant décrié


---------------
.
n°2018237
Joel F
Real men use unique_ptr
Posté le 21-08-2010 à 10:11:34  profilanswer
 

en ce que les gens en mettes partout ou il n'a pas de sens. Donc en general, on réfléchi avant de vraiment trouver que y a que ça pour résoudre un probleme.

n°2018239
Glock 17Pr​o
Posté le 21-08-2010 à 10:24:27  profilanswer
 

dans mes applis bien souvent j'ai ma classe main qui est un singleton dans laquelle j'aggrège d'autres objets, tout ces objets n'ont vocation qu'à avoir une seule instance dans le programme, comme une liste de connexion , une connexion à une Bdd etc, ça marche bien en multi thread et c'est très pratique de pouvoir avoir accés simplement à tous ces objets dans le thread de la gui dans les thread socket etc
 


---------------
.
n°2018250
Joel F
Real men use unique_ptr
Posté le 21-08-2010 à 12:16:55  profilanswer
 

tu fait du JAVA donc ...

n°2018283
GrosBocdel
Posté le 21-08-2010 à 15:51:04  profilanswer
 

Joel F a écrit :

tu fait du JAVA donc ...


 
pourquoi?

n°2018289
Joel F
Real men use unique_ptr
Posté le 21-08-2010 à 18:09:08  profilanswer
 

tu parles d'une classe main ...

n°2018292
Glock 17Pr​o
Posté le 21-08-2010 à 18:54:30  profilanswer
 

une classe main = une classe centrale, qui contient en membre donné tous les objets importants de l'appli, c'est une manière révolutionnaire de faire les applis imo


---------------
.
n°2018304
GrosBocdel
Posté le 21-08-2010 à 21:50:07  profilanswer
 

Glock 17Pro a écrit :

une classe main = une classe centrale, qui contient en membre donné tous les objets importants de l'appli, c'est une manière révolutionnaire de faire les applis imo


 
Un truc qui est déclaré en global mais qu'on n'a pas le droit de faire mais qui marche trop bien?

n°2018309
Joel F
Real men use unique_ptr
Posté le 21-08-2010 à 22:42:58  profilanswer
 

ouais ca evite de reflechir au design, tu peux ecrire du C++ qui ressemble à du C moche. Quelle avancée

n°2018310
Glock 17Pr​o
Posté le 21-08-2010 à 22:43:01  profilanswer
 

ça évite de faire un design foireux inutilement...là t'as un design simple fiable efficace en MThread, qui fait ce qu'on lui demande, facile à faire évoluer bref wtf with singleton
 
PS : philosophie qui convient certainement en environnement où le temps de développement est cours et les évolutions fréquentes


Message édité par Glock 17Pro le 21-08-2010 à 22:50:12

---------------
.
n°2018312
Joel F
Real men use unique_ptr
Posté le 21-08-2010 à 23:11:08  profilanswer
 

des boites de dev de qualité ça madame :/

n°2018313
Glock 17Pr​o
Posté le 21-08-2010 à 23:16:31  profilanswer
 

des boites où la qualité du dev à peu d'importance puisque dans 2 ans ça sera à jeter, seul importe la fiabilité maximal et le temps de dev le plus court possible. chose que le singleton à comme avantage


---------------
.
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Singleton et bibliothèque dynamique

 

Sujets relatifs
look ou bibliothéque d'interface builder c++Diaporama dynamique
EXCEL : Envoyer automatique un tableau croisé dynamique par mailliste dynamique php associé a une base de données mysql [RESOLU]
Bibliothèque de visualisation de graphes scientifiquesVBA-Bouton dynamique-Petit coup de pouce
changement dynamique des images javaMacro avec filtre dynamique
macro tableau croisé dynamiquebibliothèque langage C
Plus de sujets relatifs à : Singleton et bibliothèque dynamique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR