Message Queue Reference
A version of this page is also available for
4/8/2010
This language reference section contains descriptions of message queue programming elements.
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 | 含义 |
---|---|
|
消息将发布到系统中的所有顶级窗口,包括已禁用或不可见的未拥有窗口、重叠的窗口和弹出窗口。 消息不会发布到子窗口。 |
|
该函数的行为类似于对 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);
南来地,北往的,上班的,下岗的,走过路过不要错过!
======================个性签名=====================
之前认为Apple 的iOS 设计的要比 Android 稳定,我错了吗?
下载的许多客户端程序/游戏程序,经常会Crash,是程序写的不好(内存泄漏?刚启动也会吗?)还是iOS本身的不稳定!!!
如果在Android手机中可以简单联接到ddms,就可以查看系统log,很容易看到程序为什么出错,在iPhone中如何得知呢?试试Organizer吧,分析一下Device logs,也许有用.