Fermer un socket MFC ( multithread)

Signaler
Messages postés
1
Date d'inscription
dimanche 18 mai 2003
Statut
Membre
Dernière intervention
15 août 2003
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Alors voilà mon problème.

J'ai fais un timer pour un timeout sur un socker serveur.

pour ce timer j ai lancer un nouveau thread.

void TimerThread(CNewSuperCDlg* m_MainDlg)
{
long timeD,timeF;
time(&timeD);

while(1)
{
time(&timeF);
if(timeF-timeD>10)
{

m_MainDlg->SetBgNo();
m_MainDlg->OnClose();

Beep(3000,100);
_endthread();
}
}
}

Elle recoit comme argument un pointer sur la classe qui l'a lancée.

je l'ai lancé avec
Timer = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)&TimerThread,this,NULL,NULL);

et lorsque je vais dans OnClose()

j ai un assertion failed dans ici
m_sSocketClient.Close();
m_sSocketEcoute.Close();

qqun a une idée?

2 réponses

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
Je fais pas MFC, mais si tu ferme tes sockets dans un thread alors qu'ils sont en cours d'utilisation dans un autre thread => plantage.
Je supose qu'au moment ou tu execute ce thread, SocketEcoute est tjrs entrain d'ecouter et SocketClient est soit entrain d'envoyer soit entrain d'attendre un truc.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Salut,
fais bien attention en employant CreateThread avec mfc ou tout code C++, quand ta func thread terminera elle n'appellera jamais de destructeur d'objet car CreateThread est un code bas niveau. Tu devrais employer les fonctions de thread mfc sinon fuites memoire en prevision.
BruNews, ciao...