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

  FORUM HardWare.fr
  Programmation
  C++

  boite de dialogue lancée par un thread bug!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

boite de dialogue lancée par un thread bug!

n°993583
yoskater
Posté le 25-02-2005 à 15:29:43  profilanswer
 

[wx-Dev_CPP]
 
 
 
Alors j'ai une boite de dialogue m_srvConsoleDlg avec un thread de traitement en fond dont voici un extrait de code.
Ce thread(wxThread surchargé) attent betement de connexion et reagi lorsqu'il y en a une en demandant si la connexion est acceptable et ou il fau enregistré le fichier.
 
Si tout ca ce passe bien ce thread doit lancer un boite de dialogue (maboite) avec un Show non bloquant et le thread retourne scruté le port...Et bien la...boomm la fenetre s'affiche et gele le programme..(ligne 54)
  :sweat:  
 
 
 
 

Code :
  1. while(boucle){
  2.             //Affichage dans la console de la boite de dialogue du serveur
  3.             m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText(".En attente de connexion sur le port "+m_srvConsoleDlg->m_port+"\n" );
  4.             //Attente de connexion (en socket bloquante)
  5.             if ( (erreur=clientSock=srvSock->serverAcceptConnection()) > 0 ){
  6.                     //Recuperation de l'adresse du client
  7.                     clientAddress = srvSock->getClientAddress();
  8.                     affConnex.Printf("..Demande de connexion venant de %s\n",clientAddress);
  9.                     m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText(affConnex);
  10.                    
  11.                    
  12.                    
  13.                     //Reception des Infos du fichier---------------------------------------------------------
  14.               m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText("...Reception des informations sur le fichier\n" );
  15.                     filename=new char[200];
  16.               if ( (erreur=receivedBytes=srvSock->serverReceive(clientSock,filename,200)) > 0){
  17.                   filename[receivedBytes]='\0';
  18.                   affConnex.Printf("....Nom : %s\n",filename);
  19.                         m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText(affConnex);
  20.                     }
  21.               else{
  22.                 m_srvConsoleDlg->TraitementErreur(erreur);
  23.               return NULL;
  24.          }
  25.               char *sizeStr=new char[20];
  26.    
  27.               if ( (erreur=receivedBytes=srvSock->serverReceive(clientSock,sizeStr,20)) > 0){
  28.                   sizeStr[receivedBytes]='\0';
  29.                   fileSize=atof(sizeStr);
  30.                   affConnex.Printf("....Taille : %s\n",sizeStr);
  31.                         m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText(affConnex);
  32.               }
  33.               else{
  34.                   m_srvConsoleDlg->TraitementErreur(erreur);
  35.                   return NULL;
  36.               }
  37.               delete[] sizeStr;
  38.          //--------------------------------------------------------------------------
  39.                    
  40.                     //Demande d'acceptation
  41.                     affConnex.Printf("Acceptez-vous?\n.Le fichier : %s\n.Taille : %.2lf (ko)\nEnvoyé par %s",filename,(fileSize/1024),clientAddress);
  42.                     demConnex=new wxMessageDialog(m_srvConsoleDlg,affConnex,"Demande de connexion",wxYES_NO|wxYES_DEFAULT);
  43.                     if (demConnex->ShowModal()==wxID_YES){
  44.                        
  45.                         affConnex.Printf("..Connexion acceptée pour %s\n",clientAddress);
  46.                         m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText(affConnex);
  47.                         //Ou le sauver?
  48.                         affConnex.Printf("%s",filename);
  49.                         saveFileDlg=new wxFileDialog(m_srvConsoleDlg,"Sauvegarder sous...","",affConnex,"*.*",wxSAVE | wxOVERWRITE_PROMPT);
  50.                         if (saveFileDlg->ShowModal()==wxID_OK){
  51.                            
  52.                               //BUGGGGGGGGGGGGGGGGGGGGG!!
  53.                               (wxDialog *maboite declaré avant...)
  54.                               maboite=wxDialog(.....);
  55.                               maboite.Show();
  56.                         }
  57.                         else{
  58.                              affConnex.Printf("...Impossible de sauvegarder %s\n",filename);
  59.                              m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText(affConnex);
  60.                              affConnex.Printf("..Connexion refusée pour %s\n",clientAddress);
  61.                              m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText(affConnex);
  62.                              srvSock->serverCloseConnection(clientSock);
  63.                         }   
  64.                         delete saveFileDlg;
  65.                     }
  66.                     else
  67.                     {
  68.                         affConnex.Printf("..Connexion refusée pour %s\n",clientAddress);
  69.                         m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText(affConnex);
  70.                         srvSock->serverCloseConnection(clientSock);
  71.                     }   
  72.                     delete demConnex;
  73.                  
  74.             }
  75.             else{
  76.                     m_srvConsoleDlg->TraitementErreur(erreur);
  77.                     return NULL;
  78.             }
  79.             fileSize=0;
  80.             delete[] filename ;
  81.     }


 
 
Le bug est donc ici , la fenetre s'affiche mais gele le programme...
 //BUGGGGGGGGGGGGGGGGGGGGG!!
(wxDialog *maboite declaré avant...)
maboite=wxDialog(.....);
maboite.Show();


Message édité par yoskater le 25-02-2005 à 15:31:11
mood
Publicité
Posté le 25-02-2005 à 15:29:43  profilanswer
 

n°994185
yoskater
Posté le 26-02-2005 à 15:16:15  profilanswer
 

euh?

n°994279
HelloWorld
Salut tout le monde!
Posté le 26-02-2005 à 17:11:12  profilanswer
 

Et si tu la crées depuis le thread primaire ça marche ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°994389
yoskater
Posté le 26-02-2005 à 20:47:48  profilanswer
 

bien...

n°995188
HelloWorld
Salut tout le monde!
Posté le 27-02-2005 à 22:03:02  profilanswer
 

Code :
  1. maboite=wxDialog(.....);


y'a pas une petite erreur là ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°999156
yoskater
Posté le 03-03-2005 à 08:06:14  profilanswer
 

non
 
en fait l'erreur c'est que un thread non principale a parfois du mal a gerer les fenetres tous comme les timers ou autres enfin ca c ma conclusion....

n°999250
bjone
Insert booze to continue
Posté le 03-03-2005 à 10:15:59  profilanswer
 

bah c'est le thread principal qui gère la queue de messages non ?

n°999377
yoskater
Posté le 03-03-2005 à 11:42:53  profilanswer
 

ben en fait non la c le serverThread qui gere les connections...
Mais ce serverThread est lancé par ServerDlg qui est la fenetre d'affichage d'info du seveur d'ou les m_srvConsoleDlg->TXTsrvConsoleDlg->....
 
MAIS cette fenetre et lancé par une autre qui elle est la principale...
.
tordu hein!

n°999780
HelloWorld
Salut tout le monde!
Posté le 03-03-2005 à 16:24:52  profilanswer
 

HelloWorld a écrit :

Code :
  1. maboite=wxDialog(.....);


y'a pas une petite erreur là ?


 


 
Là tu crées une boite de dialogue, et en fait une recopie. Ca marche peut être sans probleme, mais faudrait quand même revoir ta déclaration car là c'est pas top.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°999793
yoskater
Posté le 03-03-2005 à 16:30:59  profilanswer
 

dsl c  
 
"maboite=new wxDialog(.....);"
 
tte facon le pb vien pas de la mais bon...j'ai revu ma conception et ca marche!
mon logiciel de transfert peer2peer fonctionne!bientot besoin de testeur...


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

  boite de dialogue lancée par un thread bug!

 

Sujets relatifs
[C Ansi] Thread POSIX problème de synchronisation[python] thread et port serie
MVC dans une boîte de dialogueChanger d'image dans une boite de dialogue?
Probleme de Thread... :(inclure un thread dans une class ?
Exception et thread principale [ resolu ][Thread] Savoir qd un thread se termine
Plus de sujets relatifs à : boite de dialogue lancée par un thread bug!


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