使用WaitForMultipleObjects时注意的问题
今天处理了一个客户端控件的BUG。
这个控件会创建几个线程,每个线程链接服务器下载数据文件及图片等内容。昨天有用户反映在他机器上不能正常获得下载数据,后来经了解用户使用的是Win2K的操作系统,而我在WinXP上反复测试都没有问题。
然后找到一台Win2K的机器进行测试,确实下载存在问题。
通过输出log文件调试,发现在一处调用WaitForMultipleObjects之后,两个系统上的逻辑出现了差异。本来在XP上正常的逻辑,在Win2K上不正常了。
这个地方的逻辑原来是这样写的:
DWORD dwRet = WaitForMultipleObjects(4,pvEvents,TRUE,10000); // 等待所有事件Signal, 10秒超时
if(dwRet == WAIT_OBJECT_0)
{
// 处理正常逻辑
}
else
{
// 处理非正常逻辑
}
其中,参数pvEvents中保存的是4个由CreateEvent创建的事件,每个事件会在一个特定类型的资源下载完成后被Set Signal,而上面这处的意图就是等待这四种资源的下载完成。从日志中看,Win2K系统中进入了else块,而XP中进入了if块。
这时想到的是只能再仔细的查阅MSDN了,而MSDN确实说得很详细,只能怪自己以前没有认真阅读:
================================&