• Viernes 15 de Noviembre de 2024, 11:52

Autor Tema:  User Interface Thread Y Mensajes (messages)  (Leído 1213 veces)

Cat

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
User Interface Thread Y Mensajes (messages)
« en: Martes 25 de Mayo de 2004, 14:18 »
0
Pues el problema que tengo es que mi aplicación crea 2 Threads a partir de una clase que hereda de CWinThread, llamada CHebraPrincipal. Las creo asi:

m_Thread1 = (CHebraPrincipal *) AfxBeginThread(RUNTIME_CLASS(CHebraPrincipal),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);

m_Thread2 = (CHebraPrincipal *) AfxBeginThread(RUNTIME_CLASS(CHebraPrincipal),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);

siendo m_Thread1 y m_Thread2 de tipo CHebraPrincipal *.

Las hebras funcionan, es decir, las creo suspendidas, inicializo sus variables y despues llamo al metodo ResumeThread() de cada una de ellas y se ejecutan (comprobado).

La cuestion es que quiero que entre ella se manden Mensajes (Messages). Para ello en la clase CHebraPrincipal tengo lo siguiente:
 - En el fichero .h, las funciones que manejaran los mensajes:

//{{AFX_MSG(CHebraPrincipal)
  // NOTE - the ClassWizard will add and remove member functions here.
  afx_msg void getThreadId(WPARAM wParam, LPARAM lParam);
  afx_msg void comunicacionThread(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG


 - En el .cpp el mapa de mensajes:
BEGIN_MESSAGE_MAP(CHebraPrincipal, CWinThread)
//{{AFX_MSG_MAP(CHebraPrincipal)
  // NOTE - the ClassWizard will add and remove mapping macros here.
  ON_REGISTERED_THREAD_MESSAGE(nMsg1Id,getThreadId)
  ON_REGISTERED_THREAD_MESSAGE(nMsg2Id,comunicacionThread)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

  Las variables nMsg1Id y nMsg2Id son de tipo UINT y las inicializo en el metodo InitInstance() de la siguiente forma:

nMsg1Id = RegisterWindowMessage("Mensaje1Thread");
m_nMsg1Id = nMsg1Id;
nMsg2Id = RegisterWindowMessage("Mensaje2Thread");
m_nMsg2Id = nMsg2Id;

 Las variables m_nMsg1Id y m_nMsg2Id son variables miembro publicas UINT para poder hacer los post de los mensajes.



Desde el programa principal, tras crear los Thread suspendidos, los inicializo asi:

  m_Thread1->m_ThreadSecundarioId = m_Thread2->m_nThreadID;
  m_Thread1->m_ThreadSecundario = m_Thread2;
  m_Thread2->m_ThreadSecundarioId = m_Thread1->m_nThreadID;
  m_Thread2->m_ThreadSecundario = m_Thread1;

Es decir: a cada uno le paso el ID y el puntero del otro para que pueda postearle mensajes.

Pues con todo esto, en el metodo Run() (que se ejecuta) hago lo siguiente:

::PostThreadMessage(m_ThreadSecundarioId,m_ThreadSecundario->m_nMsg2Id,0,0);

y el otro Thread no ejecuta el metodo que debe atender el mensaje (parece que no le llegan).


PD: Se que esto planteado de esta forma puede ser un poco lioso. Solo espero que alguien que pase por aqui y que pueda ayudar y este puesto en el tema de Threads y Mensajeria pues ayude :)