XSLT存档  

不及格的程序员-八神

 查看分类:  ASP.NET XML/XSLT JavaScripT   我的MSN空间Blog

Message Queue Reference

A version of this page is also available for

Windows Embedded CE 6.0 R3

4/8/2010

This language reference section contains descriptions of message queue programming elements.

Message Queue Functions

Message Queue Messages

Message Queue Structures

Remarks

Message Queuing uses memory-mapped files to hold queued messages. There is no upper limit; the queue is of infinite size (constrained by system memory). The files are each a fixed size of 4 MB, which is also the size limit of a Message Queuing message. The driver (Mqac.sys) maps the files to kernel memory address space when Message Queuing runtime sends or receives a message.

See Also

PostMessageA 函数 (winuser.h)

将 (帖子) 消息队列中与创建指定窗口的线程关联的消息,并在不等待线程处理消息的情况下返回。

若要在与线程关联的消息队列中发布消息,请使用 PostThreadMessage 函数。

语法

BOOL PostMessageA(
  [in, optional] HWND   hWnd,
  [in]           UINT   Msg,
  [in]           WPARAM wParam,
  [in]           LPARAM lParam
);

参数

[in, optional] hWnd

类型:HWND

窗口过程接收消息的窗口的句柄。 以下值具有特殊含义。

Value含义
HWND_BROADCAST
( (HWND) 0xffff)
消息将发布到系统中的所有顶级窗口,包括已禁用或不可见的未拥有窗口、重叠的窗口和弹出窗口。 消息不会发布到子窗口。
Null
该函数的行为类似于对 PostThreadMessage 的调用, 其中 dwThreadId 参数设置为当前线程的标识符。

 

从 Windows Vista 开始,消息发布受 UIPI 的约束。 进程的线程只能将消息发布到小于或等于完整性级别的进程中线程的消息队列。

[in] Msg

类型: UINT

要发布的消息。

有关系统提供的消息的列表,请参阅 系统定义的消息

[in] wParam

类型: WPARAM

其他的消息特定信息。

[in] lParam

类型: LPARAM

其他的消息特定信息。

返回值

类型: BOOL

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。 GetLastError 在达到限制时返回 ERROR_NOT_ENOUGH_QUOTA 。

注解

当 UIPI 阻止消息时,使用 GetLastError 检索到的最后一个错误设置为 5 (拒绝访问) 。

消息队列中的消息通过调用 GetMessage 或 PeekMessage 函数来检索。

需要使用 HWND_BROADCAST 进行通信的应用程序应使用 RegisterWindowMessage 函数获取应用程序间通信的唯一消息。

系统仅对范围 0 到 (WM_USER-1) ) 中的系统 (消息进行封送。 若要将其他消息 (= >WM_USER) 发送到另一个进程,必须执行自定义封送。

如果将以下范围内的消息发送到 WM_USER 异步消息函数, (PostMessage、 SendNotifyMessage 和 SendMessageCallback) ,则其消息参数不能包含指针。 否则,操作会失败。 在接收线程有机会处理消息之前,函数将返回,发送方在使用该消息之前释放内存。

不要使用 PostMessage 发布WM_QUIT消息;使用 PostQuitMessage 函数。

辅助功能应用程序可以使用 PostMessage 将 WM_APPCOMMAND 消息发布到 shell 以启动应用程序。 无法保证此功能适用于其他类型的应用程序。

消息队列最多可以包含 10,000 条消息。 此限制应足够大。
如果应用程序超出限制,则应重新设计它以避免消耗这么多系统资源,若要调整此限制,请修改以下注册表项。

HKEY_LOCAL_MACHINE
   SOFTWARE
      Microsoft
         Windows NT
            CurrentVersion
               Windows
                  USERPostMessageLimit

最小值为 4000。

示例

以下示例演示如何使用 PostMessage 函数发布专用窗口消息。 假设你定义了名为 WM_COMPLETE的专用窗口消息:

#define        WM_COMPLETE     (WM_USER + 0)

可以将消息发布到与创建指定窗口的线程关联的消息队列,如下所示:

 WaitForSingleObject (pparams->hEvent, INFINITE) ;
 lTime = GetCurrentTime () ;
 PostMessage (pparams->hwnd, WM_COMPLETE, 0, lTime);

posted on 2023-03-14 11:32  不及格的程序员-八神  阅读(10)  评论(0编辑  收藏  举报