MAXIMUM_WAIT_OBJECTS真的是64吗?

时间:2011-02-27 06:31:27

标签: c++ multithreading

MSDN说

  

最大对象句柄数为MAXIMUM_WAIT_OBJECTS

for WaitForMultipleObjects ...在我的计算机上定义为64.它真的只有64吗?

感谢

2 个答案:

答案 0 :(得分:17)

是的,它确实是64.因为它是#define,如果不重新编译程序就无法改变,所以它几乎永远不会改变。

由于STATUS_ABANDONED_WAIT_63被定义为0xBF而STATUS_USER_APC被定义为0xC0,如果你将MAXIMUM_WAIT_OBJECTS增加了甚至只有一个,那么就没有办法分辨出第65个句柄之间的区别被放弃,等待被APC终止。正确更改MAXIMUM_WAIT_OBJECTS需要重新编号状态代码,这需要重新编译现有的每个Win32程序。

此外,使用定义为65的MAXIMUM_WAIT_OBJECTS编译的程序在定义为64的操作系统上将失败。

答案 1 :(得分:7)

是的,那真的是那个宏的价值。

这是否真的是函数能够一次等待的最大对象数是内部实现细节。但是如果 I 正在编写该函数,我会检查给定的数组长度以确保它在继续之前是在记录的边界内,即使其余代码碰巧能够等待更多,因为我不希望API的使用者使用超过文档记录的最大值,然后依赖于此类未记录的行为,从而在操作系统的未来版本中对函数的任何潜在实现提出要求