begin process at 2012 05 30 05:04:52
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Variable detruite en fin de thread


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Variable detruite en fin de thread

jeudi 2 juin 2005 à 12:42:38 | Variable detruite en fin de thread

wiool

Voila,
En c++ .NET,
J'ai un thread principal avec mon form principal (form1) et un objet (ClientPlayer).
Quand j'appelle une boite de dialogue de configuration, l'utilisateur rentre l'addresse ip dans une textbox et clique sur OK.
Le probleme: la string est detruite quand le trhread de la fenetre de dialogue est termine.
Du code, ca expliquera mieux:

// la classe clientPlayer contient l'ip du client
class ClientPlayer {
   private:
      string ipadd;
   public
:
      ClientPlayer(void);
      ClientPlayer(string ip){ipadd=ip;}
      string getIp(){return ipadd;}
}

// la classe form1 est le formulaire principal
public __gc class Form1 : public System::Windows::Forms::Form {
.
.
.

   // ici j'appelle la boite de dialogue config
   private
: System::Void form1_Load(System::Object * sender, System::EventArgs * e) {
      cp = new ClientPlayer();
      configDlg = new config(cp);
      string ip=cp.getIp()      <--------------- C'a renvoie rien, nada, du vent !!!
   }
}

//la classe de la boite de dialogue  config
public
__gc class config : public System::Windows::Forms::Form {
   config(ClientPlayer* clip)  {
      cp=clip;
      InitializeComponent();
   }

   private
:
      ClientPlayer *cp;  

      // click sur le bouton OK
      private: System::Void button1_Click(System::Object * sender, System::EventArgs * e) {
         string str=(
const char *)(Marshal::StringToHGlobalAnsi(this->textBox1->Text)).ToPointer(); // ici je convertie la text box IP en string
         this->cp=new ClientPlayer(ip); 
         this->cp->getIp(); <---------------- par contre ici ca renvoie bien l'ip !!! Aarghh
      }
}

J'ai cru comprendre que les thread (et donc mon thread de boite de config) etait pas safe et que ils dtruisent tout les objets crees quand on les quite, ok, mais comment j'lui dit de garder certains ?

 Au secours please !

jeudi 2 juin 2005 à 13:54:30 | Re : Variable detruite en fin de thread

MNEMONIC

Pourquoi tu lui passes pas ta string destination en paramètre (référence)...?
Du coup, tu es sûr qu'il ne détruit pas la variable de l'appelant.
jeudi 2 juin 2005 à 14:44:50 | Re : Variable detruite en fin de thread

wiool

Ben ouais, j'y avais penser, mais ca veuix pas marcher non plus... faut relire mes cours sur les pointeurs peut etre ? En tout cas, voice le nouveau code en faisant passer un parametre string* ip a laboite de dialogue config.... mais ca veux rien faire... Des idees ?

// la classe clientPlayer contient l'ip du client
class ClientPlayer {
   private:
      string ipadd;
   public
:
      ClientPlayer(void);
      ClientPlayer(string ip){ipadd=ip;}
      string getIp(){return ipadd;}
}

// la classe form1 est le formulaire principal
public __gc class Form1 : public System::Windows::Forms::Form {
.
.
.

   // ici j'appelle la boite de dialogue config
   private
: System::Void form1_Load(System::Object * sender, System::EventArgs * e) {
      cp = new ClientPlayer();
      string* ipadd=new string("");
      configDlg = new config(cp,ipadd);
      string ip=cp.getIp()      <--------------- C'a renvoie rien, nada, du vent !!!
   }
}

//la classe de la boite de dialogue  config
public
__gc class config : public System::Windows::Forms::Form {
   config(ClientPlayer* clip,string* ipadd)  {
      cp=clip;
      ip=ipadd
      InitializeComponent();
   }

   private
:
      ClientPlayer *cp;  
      string* ip;

      // click sur le bouton OK
      private: System::Void button1_Click(System::Object * sender, System::EventArgs * e) {
         ip=new string((
const char *)(Marshal::StringToHGlobalAnsi(this->textBox1->Text)).ToPointer()); // ici je convertie la text box IP en string
         this->cp=new ClientPlayer(ip); 
         this->cp->getIp(); <---------------- par contre ici ca renvoie bien l'ip !!! Aarghh
      }
}

J'ai

jeudi 2 juin 2005 à 17:51:30 | Re : Variable detruite en fin de thread

MNEMONIC

...Je pensais plutôt lui passer la string dans le getip pour lui mettre la valeur directement...
D'ailleurs, on m'a souvent conseillé de récupérer les valeurs dans les paramètres d'une fonction (ou autre) plutôt que dans le return, et ainsi garder le return pour renvoyer un état de fonctionnement (ok, ko, ...)


Cette discussion est classée dans : string, system, ip, cp, clientplayer


Répondre à ce message

Sujets en rapport avec ce message

rechercher une string dans un fichier sous windows [ par doudblast ] voilà : l'idée est de récuperer une ip dans un fichier txtpar contre cette ip ne sera pas toujours la même et ne sera pas toujours précisemment au mêm [C++] Probleme avec la commande system [ par Braho ] Bonjour, Je suis en train de faire une fonction qui permet de changer de ligne sur un routeur. J'ai à ma disopsition un .bat et je voulais utiliser l [Débutante] adresse IP [ par nermine ] Bonjour tout le monde, J'ai une TextBox et un Bouton et je veux, si on clike sur le bouton on vérifie que c'est adresse ip Voila que j'ai fait et je s Conversion "system::string __gc *" vers "char *"....HELP [ par starkrous ] oui ce cher "name" dans Fileinfo ne se presente pas sous une forme chaine de caractere...du coup ça m'empeche un peu de le manipuler, est ce qu'il y a 'System.NullReferenceException' avec classe [ par thetoto52 ] Voila je fait un programme en Cpp pour le lycé j'ai une classe qui me pose problème__gc class vehicule { <FONT renvoyer un system string [ par secalex ] Bonjour,Je suis entrain de devlopper une petite interface qui effectue des calculs à partir d'une valeur récupérée d'une textbox.Je récupère ma valeur transtypages char System::String [ par steph12358 ] Bonjour à tousj'ai fait du c++ avec QT4 sous linux pendant quelques mois et j'ai beaucoup de difficulté à trouver des tutos sur "visual c++ 2005" (j'a Requested registry access is not allowed. [ par blunt23 ] Je trvail avec Windows Forms application, quand je click sur Form1.h dans Solution Explorer une erreur arrive: <table cel J'y arrive pas... [ par babaslow ] Bonjour,Il n'y a que des exemples en c# en ce qui concerne les perm et quasiment rien en c++. Alors moi qui débute, je ne vous explique pas comment je


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,983 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales