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 :

problème variable globale


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 60
    Points : 47
    Points
    47
    Par défaut problème variable globale
    Salut,

    je fais un programme d'IA multithread. j'ai plusieures type d'entités intelligentes (chacune représentée par une classe) et elles communiquent entre elles au moyen d'une variable globale.
    Mon pb c'est que j'arrive pas à faire de variable globale qui fonctionne. Voilà comment j'ai fait pour l'instant :

    static vector<vector<int> > repartition_taches;

    cette déclaration est dans un .h à part que j'inclue pour chaque classe qui en a besoin.
    Le pb c'est que j'ai l'impression qu'ils font des chacun des copies de cette variable car à un instant t je n'ai pas le même état pour cette variable.
    J'ai essayé de faire un pointeur mais sans résultat.

    Si qq un a une idée...

    Log

  2. #2
    Membre confirmé Avatar de toxcct
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 434
    Points : 511
    Points
    511
    Par défaut
    dans le .h, il faut que tu déclare ta variable avec extern...
    besoin de réponses ? demande a un pote

  3. #3
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Bonjour à toi et bienvenu sur le forum developpez.com

    Pourquoi ne pas faire une classe "communication" que tu passes en paramètre à chaque objet maintenu dans chaque thread ?

    Tu auras un objet global, car partagé par toutes les entités et cela sera plus "propre", avec un système plus souple, si tu souhaites que 2 groupes de thread ne communiques qu'entre eux...

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 60
    Points : 47
    Points
    47
    Par défaut
    merci de vos conseils, j'ai justement pensé à la classe communication en attendant vos réponse et je suis en train de la mettre en place

    merci !!!
    Log

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 60
    Points : 47
    Points
    47
    Par défaut
    bon j'ai quand même un pb....
    je met la variable repartition_taches en attribut static de ma classe communication, mais j'ai un pb dinitialisation

    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
    #include<iostream>
    using namespace std;
    #include<vector>
     
    class communication{
     
    	private:
    		static vector<vector<int> > repartition_taches;
     
    	public:
    		communication();
    		~communication(){};
     
    		void ajouter_element(vector<int> vect)
    		{
    			repartition_taches.push_back(vect);
    		}
     
    		vector<vector<int> > obtenir_copie()
    		{
    			return repartition_taches;
    		}
     
     
    };
    Il me met une erreur quand je compile le main :
    : undefined reference to `communication::repartition_taches'

    je suupose qu'il faut une initialisation de type
    vector<vector<int> > communication::repartition_taches=
    mais je ne sais pas ce qu'il faut mettre pour ce type de variables.

    désolée de vous embêter encore...

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Dans communication.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector<vector<int> > communication::repartition_taches;
    Si tu veux dimensionner ton tableau tu peux aussi utiliser le constructeur approprié.

    PS : pense à utiliser les balises CODE

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 60
    Points : 47
    Points
    47
    Par défaut
    merci beaucoup ça fonctionne
    je sais pas pkoi je voulais plus compliqué

  8. #8
    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
    Points : 4 625
    Points
    4 625
    Par défaut
    Tu sais qu'aucune implémentation ne fournit la garantie qu'on peut écrire de manière simultanée dans un std::vector<int> ?
    Boost ftw

  9. #9
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 60
    Points : 47
    Points
    47
    Par défaut
    en fait je n'écris pas de façon simultanné dans le vecteur, seul le chef exploitant écrit dedans et il représente une unique thread, les autres thread ne font que lire les données pour l'instant.

    mais merci, j'en tiendrai compte si je fais des écritures simultannées plus tard

  10. #10
    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
    Points : 4 625
    Points
    4 625
    Par défaut
    Et si un thread essaie de lire pendant que le thread "exploitant" est en train d'écrire ?
    Il peut se retrouver avec des données partiellement erronées.
    Boost ftw

  11. #11
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 60
    Points : 47
    Points
    47
    Par défaut
    ça ne pose pas de pb dans mon cas, ceux qui lisent dans le fichier ne font rien tant qu'ils n'y figure pas...
    il parcourent le double vecteur jusqu'à ce qu'ils se trouvent eux même inscrit dans l'une des lignes (à un endroit précis) et alors on est sûr que toute la ligne a bien été insérée puisque mon insertion se fait en une fois par une méthode de la classe communication (atomique).

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

Discussions similaires

  1. Problème variable globale
    Par mbouskia dans le forum Images
    Réponses: 0
    Dernier message: 19/05/2010, 14h38
  2. Problème variable globale
    Par nanoute dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/08/2009, 13h03
  3. Problème variable globale contenant un stream !
    Par palmitoto dans le forum Lisp
    Réponses: 4
    Dernier message: 25/04/2008, 05h40
  4. Problème variables globales
    Par jcatala dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 20/03/2008, 20h22
  5. [javascript] Problème variable globale !!!!
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 08/08/2005, 16h41

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