Bonjour, c'est encore moi ^^"
Décidement chaque fois que je règle un problème, j'en ai un autre ;_;
J'utilise des sockets dans des threads, pour pouvoir utiliser les notifications d'événements comme le OnReceive, il faut faire un detach du handle du socket avant de rentrer dans la thread, et faire un attach(handle) à l'initialisation de la thread.
Jusque là tout va bien, mais je n'ai aucune notification qui se déclenche, je ne comprends pas vraiment pourquoi ça ne fonctionne pas.
Je mets la code de mon appel de thread :
pThreadReceive = (MyThreadRS*)AfxBeginThread( RUNTIME_CLASS( MyThreadRS ), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
Mon code de detach et de resume thread (dans ma thread principale) :
1 2
| hConnected = incomingSock->Detach();
pThreadReceive->ResumeThread(); |
Et le code de ma thread :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| BOOL MyThreadRS::InitInstance()
{
Connection *m_connect = new Connection;
m_sConnected.Attach(hConnected);
TRACE("MyThreadRS::InitInstance\n");
if (!AfxSocketInit())
{
return FALSE;
}
InitFile();
while(true)
{
SingleStep();
Sleep(2000);
}
m_sConnected.Detach();
return TRUE;
}
void MyThreadRS::SingleStep()
{
ARGUMENTS MyArguments;
if(!m_pArOut->IsBufferEmpty())
{
m_pArOut->Write(&MyArguments, sizeof(ARGUMENTS));
m_pArOut->Flush();
TRACE("MyThreadRS::SingleStep : m_pArOut Flush\n");
}
TRACE("MyThreadRS::SingleStep\n");
}
void MyThreadRS::InitFile()
{
m_pFile = new CSocketFile(&m_sConnected);
m_pArIn = new CArchive(m_pFile,CArchive::load);
m_pArOut = new CArchive(m_pFile,CArchive::store);
TRACE("MyThreadRS::InitFile\n");
} |
Le Sleep n'est là que pour ne pas avoir trop de trace en éxécution.
En plus, au début de l'enclenchement de ma thread, je fais un flush d'une structure vide mais ça passe en éxécution.
Je devrais avoir des notifications d'événement normalement mais je n'en ai pas...
Peut etre que j'ai mal compris ce qu'il est mis dans MSDN... (je mets les liens au cas où)
http://support.microsoft.com/default.aspx?scid=kb;EN-US;175668
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_wcemfc4/html/aflrfcsocketcolcolattach.asp
Si quelqu'un connait le problème, ce serait gentil de m'aider, je désespère là ;_;
Partager