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

C++/CLI Discussion :

Probl�me d'instanciation multiples


Sujet :

C++/CLI

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre tr�s actif
    Avatar de teddyalbina
    Homme Profil pro
    D�veloppeur .Net,C++
    Inscrit en
    Janvier 2008
    Messages
    466
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur .Net,C++

    Informations forums :
    Inscription : Janvier 2008
    Messages : 466
    Par d�faut Probl�me d'instanciation multiples
    J'ai programm� un wrapper C++/CLI pour utilise berkeleydb. Ce wrapper fonctionne tr�s bien mais j'ai remarqu� hier un soucie qui ne viens pas de mon code.

    J'ai une class static , qui contiens les objets des bases de donn�es berkeley donc qui utilise mon wrapper, cette class contient aussi une foncton voici comment ce passe l'initalisation

    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
     
     
    /// <summary>
    /// Objet de la base de donn‚es de liens
    /// </summary>
    public static BerkeleyQueueManagement db_hostqueues = new BerkeleyQueueManagement("./Env_dir_db_hostqueues",
    "db_hostqueues.db",
    Convert.ToUInt32(ConfigurationManager.AppSettings["CacheGigabyte"]),
    Convert.ToUInt32(ConfigurationManager.AppSettings["CacheSize"]),
    Convert.ToInt32(ConfigurationManager.AppSettings["CacheNumber"]),
    1,
    "logdb_hostqueues.txt",
    Convert.ToUInt32(ConfigurationManager.AppSettings["TxnTimeout"]),
    Convert.ToUInt32(ConfigurationManager.AppSettings["TxnMax"]));
     
    etc....

    Puis l'initialisation des bases de donn�es
    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
     
     
    /// <summary>
    /// Initialise les bases de données
    /// </summary>
    public static void Init()
    {
    if (!db_hostqueues.OpenDatabase())
    throw new Exception("Impossible de d‚marrer l'application car HostQueue ne peut pas ˆtre ouverte");
     
    if (!db_hostdictionary.OpenDatabase())
    throw new Exception("Impossible de d‚marrer l'application car HostDictionnary ne peut pas ˆtre ouverte");
    if (!db_waitqueue.OpenDatabase())
    throw new Exception("Impossible de d‚marrer l'application car WaitQueue ne peut pas ˆtre ouverte");
    if (!db_readyqueue.OpenDatabase())
    throw new Exception("Impossible de d‚marrer l'application car ReadyQueue ne peut pas ˆtre ouverte");
    }

    A ce niveau tout vas bien rien de bien m�chant sauf que je ne peux pas initialiser toutes mes bases de donn�es

    si je fait :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    /// <summary>
    /// Initialise les bases de donn‚es
    /// </summary>
    public static void Init()
    {
    if (!db_hostqueues.OpenDatabase())
    throw new Exception("Impossible de d‚marrer l'application car HostQueue ne peut pas ˆtre ouverte");
    }
    sa marche !!!


    Si je fait :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    /// <summary>
    /// Initialise les bases de donn‚es
    /// </summary>
    public static void Init()
    {
    if (!db_hostqueues.OpenDatabase())
    throw new Exception("Impossible de d‚marrer l'application car HostQueue ne peut pas ˆtre ouverte");
    if (!db_hostdictionary.OpenDatabase())
     
    throw new Exception("Impossible de d‚marrer l'application car HostDictionnary ne peut pas ˆtre ouverte"); 
    }

    Plantage de l'application et berkeleydb qui me dit que le param�tre de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    berleydb DbEnv::set_tx_max
    est invalide

    D�s que j'essaie d'ouvrir plusieurs base de donn�es sa plante.

    Je me demande donc si cela ne viens pas de mon code C++ ? Je fais la liaison avec la dll de berkeleydb par

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    #pragma comment (lib, "libdb47.lib")
    Je ne vois pas ce qui cloche dans mon code donc je suppose que peut �tre sa viens de la compilation mais je ne trouve pas non plus ce qui cloche a ce niveau

    Merci de votre aide

  2. #2
    Membre tr�s actif
    Avatar de teddyalbina
    Homme Profil pro
    D�veloppeur .Net,C++
    Inscrit en
    Janvier 2008
    Messages
    466
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur .Net,C++

    Informations forums :
    Inscription : Janvier 2008
    Messages : 466
    Par d�faut
    Apr�s une bonne centaines de testes et des recherches sur le net notamment la lecture de cette page
    http://www.mathematik.uni-ulm.de/hel.../mp/intro.html

    je peux que le probl�me ne viens pas de mon code a proprement parl� si le fait de renseigner pour chaque instance du wrapper le paramtre tx_max (nombre max de transactions ouvertes en meme temps) fait planter l'application c'est a cause du fonctionnement du pool m�moire de berkeleydb.

    Les transactions ce d�roulent dans ce pool, donc ce qui ce passe c'est que txn_max c'est pout toutes les instances de berkeleydb ouverte dans une application, il faut donc mettre 0 a txn_max quand je cr�e les autres objets de base de donn�es.

  3. #3
    Membre tr�s actif
    Avatar de teddyalbina
    Homme Profil pro
    D�veloppeur .Net,C++
    Inscrit en
    Janvier 2008
    Messages
    466
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur .Net,C++

    Informations forums :
    Inscription : Janvier 2008
    Messages : 466
    Par d�faut
    Le probl�me est bien plus compliqu� de ce que j'ai trouv� en fait mon probl�me ne viens ni de mon code C# ni de mon code C++ mais de C++/CLI . J'ai �crit un petit prog C++ qui reprend les classes C++ que j'ai cod� et tout roule niquel, il n'y a aucun soucie dans mon code C# donc le probl�me c'est C++/CLI qui provoque des probl�mes d'acc�s m�moire (voir le doc attach�). Je ne trouve pas de solution par contre pour sa.

    Autant dire que j'ai un sacr� probl�me, je pense faire carrement un serveur C++ avec qui mon application parlera par socket !!!

    Qu'en pensez vous ???


  4. #4
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    je ne pense pas que ca vienne du C++/CLI mais de ta facon de g�rer le manag�/natif

    tu as un programme minimal qui reproduit l'erreur ?

  5. #5
    Membre tr�s actif
    Avatar de teddyalbina
    Homme Profil pro
    D�veloppeur .Net,C++
    Inscrit en
    Janvier 2008
    Messages
    466
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur .Net,C++

    Informations forums :
    Inscription : Janvier 2008
    Messages : 466
    Par d�faut
    En fait j'ai fait une petite applie C# qui utilise mon wrapper le r�sultat est super marrant . Impossible d'ouvrir deux db en meme temps !!
    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
    26
     
     
    static void Main(string[] args)
    {
    BerkeleyDB db = new BerkeleyDB("teste.db", 0, 1024*10, 1, 1, "err.txt", "./Env_dir", 1000000 * 5, 600000);
    BerkeleyDB db1 = new BerkeleyDB("teste2.db", 0, 1024*10, 1, 1, "err2.txt", "./Env_dir2", 1000000, 0);
     
    db.OpenDatabase();
    db1.OpenDatabase();
    for (uint i = 0; i < 10; i++)
    {
    Console.WriteLine(i);
    db.AddData(i, new ParamsStruct(10, DateTime.Now, 153));
    db1.AddData(i, new ParamsStruct(10, DateTime.Now, 153));
    }
     
    for (uint i = 0; i < 10; i++)
    {
    BerkeleydbWrapper.ParamsStruct a = db.GetData(i, true);
    BerkeleydbWrapper.ParamsStruct ab = db1.GetData(i, true);
    Console.WriteLine("Waittime : {0}, Datetime : {1}, Dowloaded : {2}", a.waittime, a.lastaccess, a.downloaded);
    Console.WriteLine("Waittime : {0}, Datetime : {1}, Dowloaded : {2}", ab.waittime, ab.lastaccess, ab.downloaded);
    }
     
    Console.ReadLine();
    }


    la sortie de l'application donne (voir doc attach�)

    En fait ce qui ce passe que la premi�re db n'est pas cr�� , donc db et db1 pointe vers la meme db qui est db1 .

    Bref je ne comprend plus rien, je suis pomm� la

  6. #6
    Membre tr�s actif
    Avatar de teddyalbina
    Homme Profil pro
    D�veloppeur .Net,C++
    Inscrit en
    Janvier 2008
    Messages
    466
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur .Net,C++

    Informations forums :
    Inscription : Janvier 2008
    Messages : 466
    Par d�faut
    Apr�s de nombreux testes je doit avouer que je ne trouve pas ou j'ai pu faire une erreur avec une db sa tourne niquel, mais avec deux sa pose probl�me .

Discussions similaires

  1. Probl�me d'instanciation multiple de static dans dll
    Par fredoule2k dans le forum Langage
    R�ponses: 7
    Dernier message: 10/10/2009, 13h56
  2. R�ponses: 22
    Dernier message: 05/07/2005, 00h04
  3. Probl�me de MouseListener multiples
    Par pierre.zelb dans le forum AWT/Swing
    R�ponses: 9
    Dernier message: 23/06/2005, 11h18
  4. Probl�me d'ajout multiples dans un BDD Access
    Par arnaud_verlaine dans le forum Langage SQL
    R�ponses: 3
    Dernier message: 31/05/2004, 13h34
  5. R�ponses: 6
    Dernier message: 25/03/2002, 21h11

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