Mi problema de Hilos, casi resuelto

02/07/2004 - 10:54 por sandra_soria81 | Informe spam
Hola a todos!!!! Casi tengo solucionado mi problema de hilos, gracias a
mucha gente que me ha ayudado, y guiado; El problema era modificar una
caja de texto desde otro hilo, distinto al original, que es donde se creo;
Para ello:

HWND HandleEvolucionDescarga m_pPrincipal>m_CtrlEvolucionDescarga.GetSafeHwnd();
Handle de la ventana que quiero modficar; Se la paso al hilo:
AfxBeginThread(HiloDescarga, (LPVOID)HandleEvolucionDescarga);

En el hilo creo un objeto:
CEdit* EvolucionDescarga = (CEdit*) CWnd::FromHandle
((HWND)pEvolucionDescarga);

Y a partir de este, modifico el contenido:

EvolucionDescarga->GetWindowText(tmp);
tmp += _T("");
tmp += _T("Guardando en el fichero:");
EvolucionDescarga->SetWindowText(tmp);

Me sale perfectamente, pero ahora bien, realmente lo que quiero es modicar
varias cajas de texto, encuadradas en un control por pestañas, mi idea era
pasar por los parametros del hilo, tantos handles como ventanas, pero me
da un error, no se si es ke no se puede, o no se...:

HWND HandleEvolucionDescarga m_pPrincipal->m_CtrlEvolucionDescarga.GetSafeHwnd();

HWND HandleDescargados = m_pPrincipal->m_CtrlDescargados.GetSafeHwnd();

AfxBeginThread(HiloDescarga, (LPVOID)HandleEvolucionDescarga,
(LPVOID)HandleDescargados);

Me da un error en la llamada al hilo, en AfxBegin..., para ello tengo
declarado el hilo:

HiloDescarga(LPVOID,LPVOID);

Me da el siguiente error:
none of the 2 overloads can convert parameter 1 from type 'unsigned int
(__cdecl *)(void *,void *)'

Gracias por leerme, y gracias por ayudarme;
 

Leer las respuestas

#1 Sergio
02/07/2004 - 11:25 | Informe spam
Sandra wrote:
Hola a todos!!!! Casi tengo solucionado mi problema de hilos, gracias a
mucha gente que me ha ayudado, y guiado; El problema era modificar una
caja de texto desde otro hilo, distinto al original, que es donde se creo;
Para ello:

HWND HandleEvolucionDescarga > m_pPrincipal>m_CtrlEvolucionDescarga.GetSafeHwnd();
Handle de la ventana que quiero modficar; Se la paso al hilo:
AfxBeginThread(HiloDescarga, (LPVOID)HandleEvolucionDescarga);

En el hilo creo un objeto:
CEdit* EvolucionDescarga = (CEdit*) CWnd::FromHandle
((HWND)pEvolucionDescarga);

Y a partir de este, modifico el contenido:

EvolucionDescarga->GetWindowText(tmp);
tmp += _T("");
tmp += _T("Guardando en el fichero:");
EvolucionDescarga->SetWindowText(tmp);

Me sale perfectamente, pero ahora bien, realmente lo que quiero es modicar
varias cajas de texto, encuadradas en un control por pestañas, mi idea era
pasar por los parametros del hilo, tantos handles como ventanas, pero me
da un error, no se si es ke no se puede, o no se...:

HWND HandleEvolucionDescarga > m_pPrincipal->m_CtrlEvolucionDescarga.GetSafeHwnd();

HWND HandleDescargados = m_pPrincipal->m_CtrlDescargados.GetSafeHwnd();

AfxBeginThread(HiloDescarga, (LPVOID)HandleEvolucionDescarga,
(LPVOID)HandleDescargados);

Me da un error en la llamada al hilo, en AfxBegin..., para ello tengo
declarado el hilo:

HiloDescarga(LPVOID,LPVOID);

Me da el siguiente error:
none of the 2 overloads can convert parameter 1 from type 'unsigned int
(__cdecl *)(void *,void *)'

Gracias por leerme, y gracias por ayudarme;




En la documentacion de AfxBeginThread dice que el hilo debe ser
declarado de esta manera: UINT Hilo( LPVOID pParam );
Por lo que no puedes hacer la llamada tal y como la planteas, pero igual
si que puedes hacerte una estructura de handles, y pasar la estructura,
me explico
typedef struct tagHANDLES {
HANDLE HandleEvolucionDescarga;
HWND HandleDescargados;
} varioshandles;

y luego te declaras la variable como
varioshandles handles;
haces las llamadas pertinentes:
handles.HandleEvolucionDescarga = m_p..
handles.HandleDescargados = m_p..

y por úlitmo la llamada al hilo:
AfxBeginThread(HILODESCARGA,(LPVOID)handles);

Es lo que se me ocurre, prueba a ver si te funciona, y comenta.

Preguntas similares