Bonjour,
J'utilise la classe de farscape que j'ai int�gr� dans une DLL. Je peux donc l'instancier � partir d'une autre application.
Par contre, j'ai deux probl�mes au niveau du thread avec SendMessage(), voici le code:
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
//-----------------------------------------
/*static*/ UINT CCommSerie::Thread(LPVOID pParam)
{
//
CCommSerie *pCom = (CCommSerie*)pParam;
int nResult;
DWORD WaitEvent = 0;
DWORD dwError=0;
DWORD dwMaskEvent=0;
//POUR ESSAI, A EFFACER
//pCom->m_pParent->SendMessage(WM_CCOMRCV,(WPARAM)pCom,dwMaskEvent);
pCom->m_bThreadExist=true; // amorce l'existance du thread
while(1)
{
nResult=pCom->WaitCommEvent(dwMaskEvent);
if (!nResult)
{
switch(dwError=GetLastError())
{
case 87:
case ERROR_IO_PENDING:
break;
default:
{
// erreur de communication on fait suivre ...
pCom->GetError();
pCom->OnError(dwError);
break;
}
}
}
else
{
if(pCom->IsRXEmpty()) continue;
}
// attente evenement pour sortie eventuelle du thread ou reception
WaitEvent = WaitForMultipleObjects(2, pCom->m_hArrayEvent, FALSE, INFINITE);
switch (WaitEvent)
{
case 0: //Fermeture Thread
pCom->m_bThreadExist=false;
AfxEndThread(1);
return(0);
case 1:dwMaskEvent=pCom->GetCommMask();
if(dwMaskEvent & EV_RXCHAR) // reception sur la voie.
pCom->m_pParent->SendMessage(WM_CCOMRCV,(WPARAM)pCom,dwMaskEvent);
if ((dwMaskEvent & EV_CTS) || // evenements divers.
(dwMaskEvent & EV_RXFLAG) ||
(dwMaskEvent & EV_BREAK) ||
(dwMaskEvent & EV_ERR)
|| (dwMaskEvent & EV_RING))
{
pCom->m_pParent->SendMessage(WM_CCOMEVENT,(WPARAM)pCom,dwMaskEvent);
}
break;
}
};
return 0;
} |
Voici comment j'ai proc�d�:
Afin de tester la gestion des �v�nements, d�s que je rentre dans le thread j'envoie l'�v�nement WM_CCOMRCV � mon thread principal(appli utilisant la dll). Celui-ci d�clenche juste une AfxMsgBox. Jusque l�, pas de soucis!
Par contre, une fois le message envoy�, je me retrouve avec un plantage (0xC0000005) sur la ligne suivante:
nResult=pCom->WaitCommEvent(dwMaskEvent);
Je ne l'explique pas...
Pour continuer dans mes tests, je mets en commentaires l'envoie de l'�v�nement pr�c�dent, et dans le thread principal, instanciant CCom, j'envoie des donn�es sur la ligne s�rie. Ligne s�rie � laquelle j'ai connect� RX � TX au bout pour r�cup�rer les infos �mises.
J'arrive donc � la ligne suivante dans le thread:
1 2 3 4
|
case 1:dwMaskEvent=pCom->GetCommMask();
if(dwMaskEvent & EV_RXCHAR) // reception sur la voie.
pCom->m_pParent->SendMessage(WM_CCOMRCV,(WPARAM)pCom,dwMaskEvent); |
mais cette fois ci, je reste bloqu� sur cette fonction, �tant donn� qu'il me semble que le message n'est pas trait� puisque aucun appel � la fonction associ� au message n'est fait.
Je ne comprends pas � nouveau pourquoi...Une id�e?
Merci
Nicolas
Partager