WaitForMultipleObjects中参数的问题

wwangzhihang100 2009-01-09 01:31:12
如我我使用
WaitForMultipleObjects
函数
里面的事件都是semaphor的事件,例如
sema[0], sema[1], sema[2]三个事件
那么WaitForMultipleObjects(3, sema, false, infinity)触发的时候,sema[i]是怎么变化的?
例如只有sema[0]有信号,那么sema[1]和sema[2]变化吗?
或者三个都有信号,那么wait之后三个信号量都减1么?谢谢
...全文
206 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gg16578 2009-02-01
  • 打赏
  • 举报
回复
www.itstudy.net
捕鲸叉 2009-02-01
  • 打赏
  • 举报
回复
可以在只有一个有信号的情况下返回,也可以只在三个都有信号的情况下返回,由参数BOOL bWaitAll 指定
ckt 2009-01-09
  • 打赏
  • 举报
回复
DWORD WINAPI WaitForMultipleObjects(
__in DWORD nCount,
__in const HANDLE* lpHandles,
__in BOOL bWaitAll,
__in DWORD dwMilliseconds
);
作用:等待一个或所有指定的对象为信状态,或等待超时返回.
参数:nCount -
lpHandles指向的句柄数组中的句柄个数.最大值为MAXIMUM_WAIT_OBJECTS
lpHandles -
句柄数组,数组可包含多种不同类型的句柄.句柄必须有SYNCHRONIZE访问权.
如果其中的一个句柄关闭而函数还在等待,则为未定义行为.
bWaitAll -
该值为TRUE,表示当所有等待的对象都为信状态时才返回.
FALSE则表示等待的对象中有一个为信状态就返回.
dwMilliseconds -
等待超时期限.若该值为0表示测试所有句柄的状态后马上返回.
返回:WAIT_OBJECT_0 to (WAIT_OBJECT_0 + nCount– 1) -
若bWaitAll为TRUE,函数返回表示所有等待的对象都为信状态.
若bWaitAll为FALSE,返回等待对象的句柄在数组中的索引,WAIT_OBJECT_0为0索引开始.
WAIT_ABANDONED_0 to (WAIT_ABANDONED_0 + nCount– 1) -
若bWaitAll为TRUE,表示所有等待对象都已经为信状态,且至少有1个对象为无约束的mutex obj.
若bWaitAll为FALSE,返回等待到的无约束对象句柄在数组中的索引,WAIT_ABANDONED_0为0索引开始.
WAIT_TIMEOUT -
等待超时.
WAIT_FAILED -
函数失败.
备注:等待多个内核对象的时候,如果它的bWaitAll参数设置为false.其返回值减去WAIT_OBJECT_0
就是参数lpHandles数组的序号.如果同时有多个内核对象被出发,这个函数返回的只是其中序号
最小的那个.多个内核对象被触发时,WaitForMultipleObjects选择其中序号最小的返回.
而WaitForMultipleObjects它只会改变使它返回的那个内核对象的状态.
tocpve 2009-01-09
  • 打赏
  • 举报
回复
我想 你既然传递了的false参数 WaitForMultipleObjects 应该每次只返回一个信号吧


sema[i] 怎么变化?

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧