Windows API WaitForMultiObjects(...) 最多只能等待MAXIMUM_WAIT_OBJECTS个kernal objects。MAXIMUM_WAIT_OBJECTS被定义为64。那么这就限制了一次最多只能等待64个内核对象。根据网上查阅的资料,这里给出一种解决方案,允许等待任意多的内核对象(系统支持的范围内)。

[cpp] view plaincopy
  1. #include <Windows.h>
  2. /*
  3. * Synchronically waiting for all objects signaled.
  4. * - handles : An array of object handles to wait.
  5. * - count   : The count of handles.
  6. * returns : Same as WaitForMultipleObjects.
  7. */
  8. DWORD SyncWaitForMultipleObjs(HANDLE * handles, size_t count)
  9. {
  10. int waitingThreadsCount = count;
  11. int index = 0;
  12. DWORD res = 0;
  13. while(waitingThreadsCount >= MAXIMUM_WAIT_OBJECTS)
  14. {
  15. res = WaitForMultipleObjects(MAXIMUM_WAIT_OBJECTS, &handles[index], TRUE, INFINITE);
  16. if(res == WAIT_TIMEOUT || res == WAIT_FAILED)
  17. {
  18. puts("1. Wait Failed.");
  19. return res;
  20. }
  21. waitingThreadsCount -= MAXIMUM_WAIT_OBJECTS;
  22. index += MAXIMUM_WAIT_OBJECTS;
  23. }
  24. if(waitingThreadsCount > 0)
  25. {
  26. res = WaitForMultipleObjects(waitingThreadsCount, &handles[index], TRUE, INFINITE);
  27. if(res == WAIT_TIMEOUT || res == WAIT_FAILED)
  28. {
  29. puts("2. Wait Failed.");
  30. }
  31. }
  32. return res;
  33. }

windows核心编程 如何等待超过64(MAXIMUM_WAIT_OBJECTS) kernal object相关推荐

  1. 基于visual c++之windows核心编程代码分析(64)现有的exe文件中添加自己的代码

    我们进行信息安全编程的时候,经常需要向exe文件插入自己的源代码, 我们如何在代码中实现呢.请见代码与注释讲解 #include <iostream.h> #include <win ...

  2. C++Windows核心编程读书笔记(转)

    http://www.makaidong.com/(马开东博客) 这篇笔记是我在读<windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的 ...

  3. [C++]《Windows核心编程》读书笔记

    这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入 ...

  4. 未处理异常和C++异常——Windows核心编程学习手札之二十五

    未处理异常和C++异常 --Windows核心编程学习手札之二十五 当一个异常过滤器返回EXCEPTION_CONTINUE_SEARCH标识符时是告诉系统继续上溯调用树,寻找另外的异常过滤器,但当每 ...

  5. 用户方式中线程的同步——Windows核心编程学习手札之八

    用户方式中线程的同步 --Windows核心编程学习手札之八 系统中所有线程都必须拥有对各种系统资源的访问权,这些资源包括内存堆栈.串口.文件.窗口和许多其他资源.如果一个线程需要独占对资源的访问权, ...

  6. 线程与内核对象的同步——Windows核心编程学习手札之九

    线程与内核对象的同步 --Windows核心编程学习手札之九 用户方式下的线程同步机制具有速度快的特点,但有其局限性,对于许多应用程序来说,并不合适.例如,互锁函数家族只能在单值上运行,根本无法使线程 ...

  7. Windows核心编程学习九:利用内核对象进行线程同步

    注:源码为学习<Windows核心编程>的一些尝试,非原创.若能有助于一二访客,幸甚. 1.程序框架 #include "Queue.h" #include <t ...

  8. 《Windows核心编程系列》九谈谈同步设备IO与异步设备IO之同步设备IO

    <Windows核心编程系列>九谈谈同步设备IO与异步设备IO之同步设备IO 同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请 ...

  9. 《windows核心编程系列》十八谈谈windows钩子

    windows应用程序是基于消息驱动的.各种应用程序对各种消息作出响应从而实现各种功能. windows钩子是windows消息处理机制的一个监视点,通过安装钩子能够达到监视指定窗体某种类型的消息的功 ...

最新文章

  1. from . import_python首行代码import *,from * import * 解析
  2. tf17: “声音大挪移”
  3. ICLR认知科学@AI workshop一览
  4. DDD 领域驱动设计 教程
  5. 怎么给网站加js_网站站内SEO优化实操细节详解,权重上升嗖嗖的
  6. 币未来趋势分析_分析:中国便利店零售市场现状以及未来发展趋势
  7. 像素游戏的动态光影效果
  8. 让我安静的写会儿代码
  9. Maven的安装以及在Myeclipse上的配置——超详细
  10. 如何整一个厉害的产品slogan?
  11. 敏捷开发系列学习总结(10)——到底什么是敏捷开发?
  12. dorado 刷新_dorado BDF常见问题
  13. Mathcad tips_学习笔记
  14. 基于CompactRIO的嵌入式车载电性能测试系统研发
  15. mysql move table_关于move table和rebuild index批量操作的记录
  16. 哥尼斯堡七桥问题用计算机,哥尼斯堡七桥问题解法真的解不出来?请尽快解答.急...
  17. 思科光纤模块兼容性解决
  18. android 动态贴纸,萌拍动态贴纸相机软件下载
  19. 如何解决LabView的Active X容器中无Animation GIF Control问题
  20. scratch教程----5.特效的制作

热门文章

  1. JavaScript随机生成颜色以及十六进制颜色 与RGB颜色值的相互转换
  2. Mac OS 安全性 任何来源
  3. iOS NSArray数组过滤
  4. hadoop 2.2 本地库编译
  5. C++下的DLL编程入门
  6. Oracle Open World 2012信息汇总贴
  7. 更改本地dns的host文件解析池的FQDN,以便office communicator非域远程登录
  8. 解决python2和python3的pip冲突
  9. 自测之Lesson6:文件I/O
  10. shell中几个特殊的符号