yoskater | [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)
Code :
- while(boucle){
- //Affichage dans la console de la boite de dialogue du serveur
- m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText(".En attente de connexion sur le port "+m_srvConsoleDlg->m_port+"\n" );
- //Attente de connexion (en socket bloquante)
- if ( (erreur=clientSock=srvSock->serverAcceptConnection()) > 0 ){
- //Recuperation de l'adresse du client
- clientAddress = srvSock->getClientAddress();
- affConnex.Printf("..Demande de connexion venant de %s\n",clientAddress);
- m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText(affConnex);
-
-
-
- //Reception des Infos du fichier---------------------------------------------------------
- m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText("...Reception des informations sur le fichier\n" );
- filename=new char[200];
- if ( (erreur=receivedBytes=srvSock->serverReceive(clientSock,filename,200)) > 0){
- filename[receivedBytes]='\0';
- affConnex.Printf("....Nom : %s\n",filename);
- m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText(affConnex);
- }
- else{
- m_srvConsoleDlg->TraitementErreur(erreur);
- return NULL;
- }
- char *sizeStr=new char[20];
-
- if ( (erreur=receivedBytes=srvSock->serverReceive(clientSock,sizeStr,20)) > 0){
- sizeStr[receivedBytes]='\0';
- fileSize=atof(sizeStr);
- affConnex.Printf("....Taille : %s\n",sizeStr);
- m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText(affConnex);
- }
- else{
- m_srvConsoleDlg->TraitementErreur(erreur);
- return NULL;
- }
- delete[] sizeStr;
- //--------------------------------------------------------------------------
-
- //Demande d'acceptation
- affConnex.Printf("Acceptez-vous?\n.Le fichier : %s\n.Taille : %.2lf (ko)\nEnvoyé par %s",filename,(fileSize/1024),clientAddress);
- demConnex=new wxMessageDialog(m_srvConsoleDlg,affConnex,"Demande de connexion",wxYES_NO|wxYES_DEFAULT);
- if (demConnex->ShowModal()==wxID_YES){
-
- affConnex.Printf("..Connexion acceptée pour %s\n",clientAddress);
- m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText(affConnex);
- //Ou le sauver?
- affConnex.Printf("%s",filename);
- saveFileDlg=new wxFileDialog(m_srvConsoleDlg,"Sauvegarder sous...","",affConnex,"*.*",wxSAVE | wxOVERWRITE_PROMPT);
- if (saveFileDlg->ShowModal()==wxID_OK){
-
- //BUGGGGGGGGGGGGGGGGGGGGG!!
- (wxDialog *maboite declaré avant...)
- maboite=wxDialog(.....);
- maboite.Show();
- }
- else{
- affConnex.Printf("...Impossible de sauvegarder %s\n",filename);
- m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText(affConnex);
- affConnex.Printf("..Connexion refusée pour %s\n",clientAddress);
- m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText(affConnex);
- srvSock->serverCloseConnection(clientSock);
- }
- delete saveFileDlg;
- }
- else
- {
- affConnex.Printf("..Connexion refusée pour %s\n",clientAddress);
- m_srvConsoleDlg->TXTsrvConsoleDlg->AppendText(affConnex);
- srvSock->serverCloseConnection(clientSock);
- }
- delete demConnex;
-
- }
- else{
- m_srvConsoleDlg->TraitementErreur(erreur);
- return NULL;
- }
- fileSize=0;
- delete[] filename ;
- }
|
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
|