b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

MsgWaitForMultipleObjectsEx用法

电脑杂谈  发布时间:2020-06-06 18:16:56  来源:网络整理

功能说明: 线程同步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

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...