功能说明: 线程同步API,当被阻止时仍可响应消息
原型
DWORD MsgWaitForMultipleObjectsEx(
DWORDnCount,//句柄数组中的句柄数
LPHANDLEpHandles,//指向数组的指针
DWORDdwMilliseconds,//超时值(以毫秒为单位)
DWORDdwWakeMask,//要等待的输入事件的类型
DWORDdwFlags //等待标志
);
参数
nCount
指定pHandles指向的数组中对象句柄的数量. 对象的最大数量为MAXIMUM_WAIT_OBJECTS-1
pHandles
指向对象句柄数组. 有关可以使用的对象句柄类型的列表,请参见备注部分. 该数组可以包含多种对象类型. Windows NT: 数组中的句柄必须具有SYNCHRONIZE访问权限. 有关更多信息,请参考MSDN中的“标准访问权限”.
dwMilliseconds
指定超时值(以毫秒为单位). 即使不满足参数dwWakeMask和dwFlags中指定的条件,该函数仍会在超时后返回. 如果dwMilliseconds为0,则该函数测试指定的对象状态并立即返回. 如果dwMilliseconds为INFINITE,则函数超时期限为无限.
dwWakeMask
指定添加到对象句柄数组中的输入事件对象句柄的对象类型. 此参数可以是下面列出的值的任意组合:
值
含义
QS_ALLEVENTS
WM_TIMER,WM_PAINT,WM_HOTKEY输入消息或消息队列中的已注册消息(已发布消息)
QS_ALLINPUT
任何消息都在消息队列中
QS_ALLPOSTMESSAGE
在消息队列中注册消息(此处列出的消息除外)
QS_HOTKEY
WM_HOTKEY消息在消息队列中
QS_INPUT
输入消息在消息队列中
QS_KEY
WM_KEYUP,WM_KEYDOWN,WM_SYSKEYUP或WM_SYSKEYDOWN消息在消息队列中
QS_MOUSE
消息队列中的WM_MOUSEMOVE消息或鼠标单击消息(WM_LBUTTONUP,WM_RBUTTONDOWN等)
QS_MOUSEBUTTON
消息队列中的鼠标单击消息(WM_LBUTTONUP,WM_RBUTTONDOWN等)
QS_MOUSEMOVE
WM_MOUSEMOVE消息在消息队列中
QS_PAINT
WM_PAINT消息在消息队列中
QS_POSTMESSAGE
在消息队列中注册消息(此处列出的消息除外)
QS_SENDMESSAGE
另一个线程或应用程序发送的消息在消息队列中
QS_TIMER
WM_TIMER消息在消息队列中
dwFlags
指定等待类型. 此参数可以是下面列出的值的任意组合:
值
含义
当任何对象发出信号时,该函数返回. 返回值指示哪个对象状态更改导致函数返回.
MWMO_WAITALL
仅当pHandles数组中的所有对象都具有信号时,该函数才返回
MWMO_ALERTABLE
调用QueueUserAPC加入APC将导致函数返回
MWMO_INPUTAVAILABLE
仅适用于Windows 98,Windows NT 5.0和更高版本: 即使已被其他函数(例如PeekMessage函数)检测到输入,消息队列中的输入函数也将返回.
返回值
如果函数成功,则返回值指示导致函数返回的事件. 成功的函数值为以下之一:
值
含义
WAIT_OBJECT_0至
(WAIT_OBJECT_0 + nCount-1)
如果设置了MWMO_WAITALL标志,则返回值指示所有指定的对象处于发信号状态. 返回值减去WAIT_OBJECT_0是pHandles数组中导致函数返回的对象的索引
WAIT_OBJECT_0 + nCount
在输入队列中存在dwWakeMask参数中指定的新输入类型. 诸如PeekMessage,GetMessage,GetQueueStatus和WaitMessage之类的功能会将队列中的消息标记为旧消息. 因此,当您在这些函数之后调用MsgWaitForMultipleObjectsEx时,除非到达新的指定输入,否则该函数将不会返回. 当发生需要此线程活动的系统事件(例如前台活动)时,也会返回此值. 因此,即使没有相应的输入出现或dwWaitMask设置为0,也可以返回MsgWaitForMultipleObjectsEx. 如果发生这种情况,请在再次调用MsgWaitForMultipleObjectsEx之前,先调用PeekMessage或GetMessage处理系统事件.
WAIT_ABANDONED_0至
(WAIT_ABANDONED_0 + nCount-1)
如果设置了MWMO_WAITALL标志,则返回值指示所有指定的对象都处于信号状态,并且其中至少一个是废弃的互斥对象. 另外,返回值减去WAIT_ABANDONED_0是pHandles数组中导致函数返回的已丢弃互斥锁的索引
WAIT_IO_COMPLETION
等待被添加到队列中的用户模式异步过程调用(APC)终止
WAIT_TIMEOUT
超时,但不满足dwFlags和dwWakeMask参数中的条件
如果函数调用失败,则返回值为0xFFFFFFFF. 如果要获取更多错误信息,请调用GetLastError函数.
备注
MsgWaitForMultipleObjectsEx函数检查dwWakeMask和dwFlags参数中指定的条件是否满足. 如果不满足条件,则调用线程进入有效的等待状态. 当满足其中一个等待条件或超时时,线程使用很少的处理器时间.
在返回之前,wait函数将修改某些异步对象的状态. 修改将仅针对那些将在设置信号状态后使函数返回的对象queueuserapc返回值,例如,系统将信号量的参考计数减一. 当dwFlags为零且多个对象处于信号状态时queueuserapc返回值,该函数选择一个对象以确保等待;未选择对象的状态不受影响.
MsgWaitForMultipleObjectsEx函数可以在pHandles数组中指定以下对象类型:
有关更多信息,请参阅同步对象
QS_ALLPOSTMESSAGE和QS_POSTMESSAGE标志在删除时是不同的. 当您调用GetMessage或PeekMessage时,将消除QS_POSTMESSAGE,无论您是否过滤邮件. 当您调用不过滤消息的GetMessage或PeekMessage时,将消除QS_ALLPOSTMESSAGE(wMsgFilterMin和wMsgFilterMax均为零). 当您多次调用PeekMessage从不同区域获取消息时,此功能很有用.
Windows CE: Windows CE不支持QS_HOTKEY分配的dwWakeMask参数,也不支持MWMO_WAITALL和MWMO_ALERTABLE标志分配的dwFlags参数.
MsgWaitForMultipleObjectsEx复制句柄表,向其中添加消息队列事件,然后调用WaitForMultipleObjects
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-236255-1.html
抬高土地出让金
你是喝到肚子