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++ Discussion :

execution de code hors creation d'objets


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 9
    Par défaut execution de code hors creation d'objets
    Bonjour,

    Il me semble qu'il est possible en C++ de declarer du code qui doit etre execute au demarage d'une application sans etre appelé par une fonction.

    Si c'est possible pouvez vous me dire comment. Car j'ai une classe qui a des methodes statiques qui ont besoin de l'exectution d'une initialisation (creation de semaphores ....)

    Et comme je souhaite eviter quelque chose du type:
    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
    maclasse::methode1()
    {
    if(!initialised)
    init();
    ....
    }
     
     
    maclasse::methode2()
    {
    if(!initialised)
    init();
    ....
    }
     
    ....
    ....
    ....
    ....
     
    maclasse::init()
    {
    creation de semaphore
    ....
    }
    Je ne sais pas si c'est tres clair et si c'est possible. Il me semble qu'un ancien copain avait reussi a faire ca avec visual studio.
    Merci pour votre aide,

    Franck

    balises [code] rajoutées par r0d.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Utilise un constructeur et pas une fonction membre init().
    Tu peux executer du code au début du programme avec des objets déclarés en static.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 9
    Par défaut
    Citation Envoyé par loufoque
    Utilise un constructeur et pas une fonction membre init().
    Tu peux executer du code au début du programme avec des objets déclarés en static.
    Merci pour ta reponse mais dans mon cas il n'y a pas d'objet crée avant l'appel des methodes statiques.
    Les methodes statiques que j'utilise sont des sortes "factory" d'objets maclasse et manipulent des listes d'objet maclasse. Et je souhaite proteger les appels (les methode1 et 2 peuvent etre appelé parrallellement) en utisant une semaphore qui doivent etre crée prealablement.

    Pour info le header est du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    maclasse {
      public:
      static methode1();
      static methode2();
      static init(); 
      methodedinstance1();
      methodedinstance2();
      methodedinstance3();
      .....
    }
    Je souhaite supprimer la fonction init sans creer pour cela d'objet ma classe a l'initialisation. Est-ce possible ??

    Merci

    balises [code] rajoutées par r0d. Merci d'y penser la prochaine fois.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 130
    Par défaut
    De toutes façons, si tu n'as pas d'instance de ta classe MaClasse, il me semble que tu ne pourras pas utiliser tes méthodes non statiques (methodeinstance1 ,2 et 3).
    Est-ce réellement gênant pour toi de créer une instance de MaClasse à l'initialisation de ton appli ?

  5. #5
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Une autre solution, c'est d'avoir un membre statique qui te permet de savoir si la classe a été initialisée, et de tester cette condition dans le constructeur.

    Si ce n'est pas fait, tu initialises ta classe.

    De cette façon, ta classe n'est pas initialisée au début de l'application, mais uniquement au moment où tu en as besoin.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Tu peux faire un objet initialiseur :

    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
    struct maclasse_initializer
    {
        maclasse_initializer()
        {
            maclasse::methode1();
            maclasse::methode2();
        }
    };
     
    static maclasse_initializer gInitializer;
     
    int main ()
    {
        // arrivé ici, maclasse::methode1() et
        // maclasse::methode2() ont déjà été appelées
        ...
    }

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 9
    Par défaut
    Citation Envoyé par loufoque
    Utilise un constructeur et pas une fonction membre init().
    Tu peux executer du code au début du programme avec des objets déclarés en static.
    En fait "static methode1()" crée des objets maclasse et les range dans une liste et "static methode2()" retourne le nombres d'objets maclasse. Ce sont ces fonctions qui ne doivent pas etre appelers en meme temps.

    Il n'y a pas de sens a creer une instance statique car l'objet ne sera utilisé par personne.
    Y-at-il une autre methode ??

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Citation Envoyé par gfranck
    Il n'y a pas de sens a creer une instance statique car l'objet ne sera utilisé par personne.
    si un objet est créé à des fins d'initialisation, il a quand même bien une utilité !!

    Citation Envoyé par gfranck
    Y-at-il une autre methode ??
    Sans aucune construction d'objet statique, je ne crois pas...

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Utiliser un singleton ? Cela permet de forcer l'initialisation d'objets dans un certain ordre, lorsqu'on en a besoin.

Discussions similaires

  1. batch qui execute du code
    Par fbu78 dans le forum Access
    Réponses: 2
    Dernier message: 21/09/2005, 22h31
  2. Executer du code binaire au sein d'un programme
    Par Hidekii dans le forum MFC
    Réponses: 13
    Dernier message: 07/09/2005, 22h10
  3. [FLASH MX2004] Rien ne se passe qd j'execute mon code
    Par adilou1981 dans le forum Flash
    Réponses: 2
    Dernier message: 27/07/2005, 23h31
  4. [C#]Comment executer du code qui se trouve dans une string ?
    Par freddyboy dans le forum Windows Forms
    Réponses: 4
    Dernier message: 28/02/2005, 16h31
  5. Lancer des shell unix pour creation d'objet ORACLE
    Par sygale dans le forum Administration
    Réponses: 6
    Dernier message: 27/10/2004, 18h03

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