mi pregunta es : ¿cómo puedo utilizar SendMessage() para implementar el hilo de comunicación entre dos procesos, uno con una ventana de usuario (GUI) y el otro con la ventana no?

El problema es que SendMessage() necesita un identificador (HWND)?

Otro detalle acerca de mi proyecto : de Dos hilos, uno que ejecuta el código administrado (el uno con el interfaz de usuario), y la ejecución de código nativo (el uno sin ventana)

Muchas gracias!

SendMessage es increíblemente peligroso función que se va a utilizar en un entorno multiproceso, porque no es thread-safe) y puede resultar en interbloqueos (hablo desde la experiencia).

OriginalEl autor | 2009-01-16

4 Comentarios

  1. 3

    Tal vez usted debe tratar de usar PostMessage o PostThreadMessage

    Me gusta PostThreadMessage mucho. Hay un blockant versión de esta función? Porque PostThreadMessage devuelve sin esperar a que el destinatario para procesar el mensaje.
    No. No sería demasiado difícil de aplicar un bloqueo de la versión de uso PostThreadMessage, y luego tener el hilo de la llamada del bloque en caso de que el destinatario se establece cuando se ha procesado el mensaje

    OriginalEl autor schnaader

  2. 2

    Si el hilo no tiene ninguna ventana, no de la cola de mensajes, y ningún mensaje despachador, entonces va a ser difícil para un mensaje. Es común que los hilos para crear ocultos de windows sólo para fines de comunicación (echar un vistazo con Windows Espía y usted verá un montón de ejemplos).

    Una alternativa es el uso de la memoria compartida y un primitivo de sincronización de un evento o un semáforo. Otra alternativa es el uso de tubos.

    OriginalEl autor jdigital

  3. 2

    lo @jdigital, dijo. Tenga en cuenta que si se crea una ventana oculta, y tu hilo ya no implementar un bucle de mensaje (ya sea en regular win32-habla, o en el contexto de una COM STA-y si usted no tiene ninguna idea de lo que estoy hablando, entonces probablemente no existe en su hilo), también tendrás que crear un bucle de mensajes así. ATL es bastante fácil con _AtlModule.RunMessageLoop(); Desafortunadamente, esto también significa que el hilo en cuestión es, probablemente, va a tener que ser manejado por eventos, mientras que es en el bucle de mensajes. Usted puede hacer cosas complicadas como MsgWaitForMultipleObjects, pero se pone peluda.

    He aquí un ejemplo de ocultos de windows si usted está familiarizado con el ATL/COM. Fui a través de este dolor un tiempo atrás y pensaba que había una discusión útil sobre microsoft.público.vc.atl, pero lo mejor que se puede encontrar ahora es este post. que entra en algunos detalles acerca de las variantes de los bucles de mensajes (qué hacer si usted tiene pulsaciones de aceleradores o no modal windows, suena como usted, no en su aplicación).

    OriginalEl autor Jason S

Dejar respuesta

Please enter your comment!
Please enter your name here