Función PostThreadMessageA (winuser.h)
Envía un mensaje a la cola de mensajes del subproceso especificado. Devuelve sin esperar a que el subproceso procese el mensaje.
Sintaxis
BOOL PostThreadMessageA(
[in] DWORD idThread,
[in] UINT Msg,
[in] WPARAM wParam,
[in] LPARAM lParam
);
Parámetros
[in] idThread
Tipo: DWORD de
Identificador del subproceso al que se va a publicar el mensaje.
Se produce un error en la función si el subproceso especificado no tiene una cola de mensajes. El sistema crea la cola de mensajes de un subproceso cuando el subproceso realiza su primera llamada a una de las funciones User o GDI. Para obtener más información, vea la sección Comentarios.
La publicación de mensajes está sujeta a UIPI. El subproceso de un proceso solo puede publicar mensajes en colas de mensajes publicados de subprocesos en procesos de nivel de integridad menor o igual.
Este subproceso debe tener el privilegio SE_TCB_NAME para publicar un mensaje en un subproceso que pertenece a un proceso con el mismo identificador único local (LUID), pero está en un escritorio diferente. De lo contrario, la función produce un error y devuelve ERROR_INVALID_THREAD_ID.
Este subproceso debe pertenecer al mismo escritorio que el subproceso que realiza la llamada o a un proceso con el mismo LUID. De lo contrario, la función produce un error y devuelve ERROR_INVALID_THREAD_ID.
[in] Msg
Tipo: UINT
Tipo de mensaje que se va a publicar.
[in] wParam
Tipo: WPARAM de
Información adicional específica del mensaje.
[in] lParam
Tipo: LPARAM
Información adicional específica del mensaje.
Valor devuelto
Tipo: BOOL de
Si la función se ejecuta correctamente, el valor devuelto es distinto de cero.
Si se produce un error en la función, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError. GetLastError devuelve ERROR_INVALID_THREAD_ID si idThread no es un identificador de subproceso válido o si el subproceso especificado por idThread no tiene una cola de mensajes. GetLastError devuelve ERROR_NOT_ENOUGH_QUOTA cuando se alcanza el límite de mensajes.
Observaciones
Cuando uiPI bloquea un mensaje, se recupera con GetLastError, se establece en 5 (acceso denegado).
El subproceso en el que se publica el mensaje debe haber creado una cola de mensajes o, de lo contrario, se produce un error en la llamada a PostThreadMessage. Use el siguiente método para controlar esta situación.
- Cree un objeto de evento y, a continuación, cree el subproceso.
-
Use la función waitForSingleObject de
para esperar a que el evento se establezca en el estado señalado antes de llamar a PostThreadMessage . -
En el subproceso al que se publicará el mensaje, llame a PeekMessage como se muestra aquí para forzar al sistema a crear la cola de mensajes.
PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE)
- Establezca el evento para indicar que el subproceso está listo para recibir mensajes publicados.
Los mensajes publicados por PostThreadMessage no están asociados a una ventana. Como regla general, los mensajes que no están asociados a una ventana no se pueden enviar mediante la función DispatchMessage. Por lo tanto, si el subproceso del destinatario está en un bucle modal (utilizado por Cuadro de mensajes o DialogBox), se perderán los mensajes. Para interceptar mensajes de subproceso mientras se encuentra en un bucle modal, use un enlace específico del subproceso.
El sistema solo realiza la serialización de mensajes del sistema (los del intervalo de 0 a (WM_USER-1)). Para enviar otros mensajes (los >= WM_USER) a otro proceso, debe realizar la serialización personalizada.
Hay un límite de 10 000 mensajes publicados por cola de mensajes. Este límite debe ser lo suficientemente grande. Si la aplicación supera el límite, se debe rediseñar para evitar consumir tantos recursos del sistema. Para ajustar este límite, modifique la siguiente clave del Registro.
HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows NT CurrentVersion Windows USERPostMessageLimit
El valor mínimo aceptable es 4000.
Nota
El encabezado winuser.h define PostThreadMessage como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Conventions for Function Prototypes.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows 2000 Professional [solo aplicaciones de escritorio] |
servidor mínimo admitido | Windows 2000 Server [solo aplicaciones de escritorio] |
de la plataforma de destino de |
Windows |
encabezado de |
winuser.h (incluya Windows.h) |
biblioteca de |
User32.lib |
DLL de |
User32.dll |
conjunto de API de |
ext-ms-win-ntuser-message-l1-1-0 (introducido en Windows 8) |
Consulte también
conceptual de
otros recursos
de referencia de