La Web del Programador: Comunidad de Programadores
 
    Pregunta:  53235 - PROBLEMAS DE REFRESCO DE UN DIALGO MFC
Autor:  Victor Corugedo Orio
Hola a todos,

Espero ser capaz de explicar el "problema" bien, para ver si alguien sabe la solución.
El problema es que tengo una ventana CDialog, que cuando está haciendo muchos cálculos (puede estar desde 20 min a varias horas, realizando continuamente operaciones) y se le quita el foco y se le vuelve a dar, se minimiza y después se maximiza, etc, ya no es capaz de actualizar el contenido de la ventana correctamente, quedandose congelada.
Sin embargo cuando termina de hacer estos cálculos, ya se refresca correctamente la ventana y muestra todo bien.
Nose si me explique correctamente.

Muchas gracias de antemano.

  Respuesta:  josema
Tu problema realmente no es ningun problema, es así.

Me explico. Cuando corres una aplicación en Windows, el sistema operativo crea un proceso para esa aplicación. Ese proceso es el encargado de hacer todo el procesamiento, valga la redundancia. Si tu proceso está muy ocupado haciendo algo, no tienen tiempo para atender a la cola de mensajes de eventos de windows (el pintado, por ejemplo).
Solución: sacar el proceso largo a un WorkedThread. Un thread (o hílo) es un subproceso independiente dentro del proceso de la aplicación. Así, el proceso principal podrá atender a la cola de mensajes sin problema.

Te recomiendo que busques documentación. La programación multithread (multihilo) es algo delicada: tienes que sincronizar el acceso a variables entre los distintos hilos, definir mecanismos de ruptura de los hilos sin que se corrompan los datos; en fin, garantizar que tu aplicación sea robusta, y probarla luego en máquinas con un procesador y en máquinas con dos procesadores.