¿Cómo puedo hacer que una ejecución no me bloquee la ventana?

12/11/2003 - 12:47 por Luis | Informe spam
Hola, Tengo un programa con una ventana principal del tipo
CDialog. Esta, llama a otra clase y la hace ejecutar el
programa principal. Resulta que mientras éste se ejecuta,
no puedo interactuar con la ventana. Es decir: no veo los
mensajes que el proceso va enviando a un CEdit de la
ventana; no puedo pulsar el botón de "detener ejecución".
Todas estas cosas se realizan una vez ha acabado la
ejecución. Lo que hago es lo siguiente:

OnEjecutar()
{
m_pProceso = new CEjecucion(...);
m_pProceso->Ejecutar();
}

La ventana que tiene la función OnEjecutar() no reacciona
a nada hasta que Eejecutar() acaba. ¿Se puede evitar?

Gracias.
 

Leer las respuestas

#1 Rodrigo Corral González
12/11/2003 - 13:49 | Informe spam
Para evitarlo lo que tienes que hacer es crear un hilo de ejecución para
realizar la tarea que deja bloqueada la ventana.

Si no quieres complicarte con hilos y la tarea que relizas es de tipo
iterativo puede poner en cada paso de bucle llamadas a la siguiente función,
que permite que se procesen los mensajes de ventana de manera que esta no se
quede muerta, de todos modos te recomiento que uses los hilos.

void CApplication::DoEvents()
{
MSG msg;
while ( ::PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )
{
if ( !PumpMessage( ) )
{
::PostQuitMessage(0);
break;
}
}
// let MFC do its idle processing
for (long lIdle = 0; OnIdle(lIdle); lIdle++ )
{;}
}

Un saludo.
Rodrigo Corral González

Preguntas similares