Avanzo con los Hilos, pero tengo una duda

14/06/2004 - 11:25 por sandra_soria81 | Informe spam
Hola a todos!!! Siguiendo su consejo, me he puesto con los hilos; Pero
tengo un digamos pequeño problema; Vereis:
En una ventana doModal, una vez pulso para descargar cierro la ventana y
creo un nuevo hilo y llamo a la funcion HiloDescarga;

void CDescargarArchivo::OnDescargarArchivo()
{
/
CDialog::OnOK();
AfxBeginThread(HiloDescarga,this);
}

En hiloDescarga llamo a la funcion para descargar el archivo

UINT HiloDescarga (LPVOID pNulo)
{
/...
Descarga.DescargarArchivo(Url, Directorio, Nombre);
return 1;
}

void CDescargarArchivo::DescargarArchivo(char * pagina, char * Directorio,
char * Nombre)
{
/...
contenido = DescargarUrl(pagina, &error, &tamano);
m_pPrincipal->m_sEvolucionDescarga += "Guardando en el fichero";
m_pPrincipal->UpdateData(false);
//Escribimos lo descargado en el directorio
fwrite(contenido,sizeof(char),tamano,pdir);
}

Pues bien, creo un hilo para ejecutar esto, me hace la descarga correcta,
ya no se me bloquea, puedo manipular el programa mientras tanto, pero
ahora, no me deja escribir, es decir, una vez que hago la descarga en
contenido tengo lo descargado, y yo quiero escribir en una caja de texto,
que se ha realizado con exito la descarga,(m_pPrincipal es un puntero a la
clase que contiene la caja de texto donde kiero escribir) y luego guardar
en el directorio ke le dije, pues bien, me da error de ejecucion si kiero
escribir, si kito lo de escribir, me lo hace perfecto; Por que puede
ser???? Antes cuando no creaba hilo, si me dejaba, claro, ke mientras me
hacia la descarga, me bloqueaba el programa; Pues nada, no se si me
enrrollado mucho, pero gracias por leerme, y gracias a todos;
 

Leer las respuestas

#1 Rodrigo Corral [MVP]
14/06/2004 - 12:45 | Informe spam
El problema es que no puedes actualizar una ventana creada en un hilo desde
otro hilo.

Tienes dos posibles soluciones, las dos basadas en pasar el handle de la
ventana que quieres acutalizar al hilo en los parametros de inicio del hilo.

Una vez tienes el handle de ventana en el hilo puedes:

1) Crear mensajes de usuario, y mandarselos a la ventan con PostMessage y
que esta actue en respuesta a los mismos haciendo lo que necesites.

2) Crear un objeto de tu clase de ventan a partir del handle (usando la
función miembro FromHandle) y utilizar sus funciones miembro para actualizar
la ventana.


Rodrigo Corral González [MVP]

microsoft.public.es.vc FAQ
http://vcfaq.europe.webmatrixhosting.net

Preguntas similares