最大对象句柄数为MAXIMUM_WAIT_OBJECTS
for WaitForMultipleObjects
...在我的计算机上定义为64.它真的只有64吗?
感谢
答案 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的使用者使用超过文档记录的最大值,然后依赖于此类未记录的行为,从而在操作系统的未来版本中对函数的任何潜在实现提出要求