关于WaitForMultipleObjects函数监测事件状态的问题
来源:互联网 发布:淘宝售假进货凭证截图 编辑:程序博客网 时间:2024/06/05 05:37
这儿又会产生一个问题,如果序号最小的那个对象频繁被触发,那么序号比它大的内核对象将的不到被出理的机会。
为了解决这一问题,可以采用双WaitForMultipleObjects检测机制来实现。
这是在百度百科上的一段话。
其实自己在项目中也用到过这个WaitForMultipleObjects函数,但是没有考虑过上述的问题。因为第一:上述的出现(如果序号最小的那个对象频繁被触发,那么序号比它大的内核对象将的不到被出理的机会)这种情况的几率较小。第二:即使是偶然出现几次,对项目的数据处理也没什么影响。
但是如果是实时的数据处理,必须在事件被激活后马上进行处理,这种情况下就必须要考虑上述的情况了。
大致的处理代码如下:
DWORD ProcessData()
{
DWORD dwRet = 0;
int nIndex = 0;
while(1)
{dwRet = WaitForMultipleObjects(nCount,pHandles,false,INFINITE);
switch(dwRet)
{
case WAIT_TIMEOUT:
break;
case WAIT_FAILED:
return 1;
default:
{
nIndex = dwRet - WAIT_OBJECT_0;
处理索引为nIndex 的event事件,可能要setEvent让其恢复到有信号状态;
处理完成后检测nIndex 之后的所有event,看看有没有是有信号状态的。
nIndex ++;
while(nIndex < nCount)
{
dwRet = WaitForMultipleObjects(nCount - nIndex,&pHandles[nIndex],false,0);
switch(dwRet)
case WAIT_TIMEOUT:
nIndex = nCount; //退出检测,因为没有被触发的对象了.
break;
case WAIT_FAILED:
return 1;
default:
{ nIndex = dwRet - WAIT_OBJECT_0;
处理索引为nIndex 的event事件,可能要setEvent让其恢复到有信号状态;
nIndex ++;
}
break;
}
}
}
break;
}
}
return 0;
}
以后写代码时再碰到这种问题还是要用WaitForMultipleObjects双检测的好,虽然即使不用影响可能也不大。但是在做项目时还是得严谨,这样的软件健壮性才好。
- 关于WaitForMultipleObjects函数监测事件状态的问题
- 关于WaitForMultipleObjects返回值得问题
- 关于SDL多指触屏事件获取各手指状态的问题。
- 网络状态的监测
- 网络状态的监测
- android_49_BroadcastReceiver_APP的状态监测
- WaitForMultipleObjects函数
- WaitForMultipleObjects()函数
- 关于 CreateEvent 和WaitForMultipleObjects以及 WaitForSingleObject 等函数的使用实例
- 多线程同步 -- WaitForMultipleObjects()函数的使用详解
- WaitForSingleObject 和 WaitForMultipleObjects函数 (让线程挂起等待事件)
- 使用WaitForMultipleObjects时注意的问题
- _beginthreadex使用WaitForMultipleObjects等待退出的问题
- 关于输入流状态函数cin.eof()的问题
- 监测windows防火墙的状态
- WaitforMultipleObjects和事件对象
- 关于动态监测鼠标移入移出窗体问题的分析
- 监测input file的事件
- 深入探讨javascript函数式编程
- 程序员面试金典 2.4 链表分割
- CodeForces 520E Pluses everywhere
- Activiti教程二
- ZOJ 3332Strange Country II(图论)
- 关于WaitForMultipleObjects函数监测事件状态的问题
- word目录编辑
- js 创建对象的几种方式
- 1032. 挖掘机技术哪家强(20)
- 台湾大学林轩田老师机器学习技法:内容简介
- Java Reflection(六):Getters and Setters
- confluence创建文件报错 can not create to file /tmp/xxx Errcode:28,引出的 df命令高级用法
- Ubuntu14下OpenCV3和QT5的安装及联合使用
- Android.mk详解