boite de dialogue lancée par un thread bug!

boite de dialogue lancée par un thread bug! - C++ - Programmation

Marsh Posté le 25-02-2005 à 15:29:43    

[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
Reply

Marsh Posté le 25-02-2005 à 15:29:43   

Reply

Marsh Posté le 26-02-2005 à 15:16:15    

euh?

Reply

Marsh Posté le 26-02-2005 à 17:11:12    

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


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 26-02-2005 à 20:47:48    

bien...

Reply

Marsh Posté le 27-02-2005 à 22:03:02    

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


y'a pas une petite erreur là ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 03-03-2005 à 08:06:14    

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....

Reply

Marsh Posté le 03-03-2005 à 10:15:59    

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

Reply

Marsh Posté le 03-03-2005 à 11:42:53    

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!

Reply

Marsh Posté le 03-03-2005 à 16:24:52    

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
Reply

Marsh Posté le 03-03-2005 à 16:30:59    

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...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed