[C con Clase] HANDLES Y THREADS

zaiboot zaiboot en e-mediasoftware.com
Jue Ene 4 18:40:53 CET 2007


Feliz año 2007 listeros. 
Aca viene la pregunta:

Tengo el siguiente codigo que baje de
http://www.codeproject.com/win32/winconsole.asp, a grandes rasgos lo que
hace es levantar una ventana grafica con un CreateDialog en una aplicación
de consola. No me pregunten el por que la necesito asi, el jefe lo pidio
asi, por lo cual como un simple peon hago lo que me manda mi jefe XD.

Se hace asi:
Se inicia un hilo llamado InputThreadProc, el cual muestra el dialogo con:
 HWND hWnd = ::CreateDialog(NULL, MAKEINTRESOURCE(IDD_DIALOG),NULL,NULL); 
Y así se obtiene el handleWindows para el procesamiento de mensajes, el cual
es algo asi:
 while(1) 
{ 
        if ( ::PeekMessage(&msg, hWnd, 0, 0, PM_REMOVE) ) 
        {
.
.
. El resto de la implementacion
 
	  }
}

Si desean ver el codigo, este se encuentra adjunto en una archivo llamado
consoleWindows.cpp de 3KB

Pero mi pregunta es la siguiente:
Yo necesito iniciar mas de un hilo que haga esto mismo, pero requiero
enviarle el handle de la ventana a procesar. O sea en lugar de hacer  HWND
hWnd = ::CreateDialog(NULL, MAKEINTRESOURCE(IDD_DIALOG),NULL,NULL);  dentro
del hilo como esta actualmente, hacerlo fuera del hilo y enviarle el hWnd al
hilo. Actualmente lo hago asi:

HWND hWnd = ::CreateDialog(NULL, MAKEINTRESOURCE(dlgMessages), NULL, NULL); 
   
_beginthread(InputThreadProc, 0, (void * )hWnd ); //yo se que deberia
revisar el valor de retorno, 
								  //pero es
para ejemplificar

Y dentro del hilo se hace lo siguiente:
void InputThreadProc( void *dummy ) 
{ 
   HWND hWnd = (HWND )dummy;
   ::ShowWindow(hWnd,SW_SHOW); 
 while(1) 
{ 
        if ( ::PeekMessage(&msg, hWnd, 0, 0, PM_REMOVE) ) 
        {
.
.
. El resto de la implementacion
 
	  }
}

Debería funcionar?? Compila bien, sin errores ni warnings.
--------------------Configuration: demo - Win32 Debug--------------------
Compiling resources...
Compiling...
demo.cpp
Linking...
Creating browse info file...

demo.exe - 0 error(s), 0 warning(s)

Pero la ventana se queda pegada, no actualiza nada, no la puedo mover, pero
cuando no pasaba el hwnd por parametro ahí si funcionaba.

Les adjunto demo.cpp para que vean el ínfimo cambio que he hecho, a ver si
acaso alguien me puede decir q esta mal????

Muchas gracias y bendiciones, que Dios lo ayude en todo, independientemente
si creen en uno o no

zaiboot
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: consoleWindows.cpp
Type: application/octet-stream
Size: 3025 bytes
Desc: no disponible
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070104/8449e3ac/attachment.obj>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: demo.cpp
Type: application/octet-stream
Size: 2916 bytes
Desc: no disponible
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070104/8449e3ac/attachment-0001.obj>


Más información sobre la lista de distribución Cconclase