我有一些代码将所有窗口句柄收集到一个数组中。问题是,由于回调是异步完成的,我不知道枚举实际上是什么时候完成的。解决这个问题的最佳方法是什么?我认为这是Windows编程中的常见问题。
BOOL CALLBACK enumWindowsProc3(HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
) {
//add hwnd to array
return TRUE;
}
int howManyWindows() {
EnumWindows (enumWindowsProc3, 0);
// need to wait here for EnumWindows() to finish...
return array size
}
答案 0 :(得分:0)
EnumWindows回调是同步的,而不是异步的。不需要等待。 EnumWindows之后的代码只有在所有回调完成后才会执行...
答案 1 :(得分:0)
我不是Windows API专家,但这是一般编程问题。
如果您有权访问可以wait(),signal()并给出项目计数的信号量类型结构,那么您可以阻止该线程,直到达到某个计数。然后,对窗口的每个异步查询都将信号()发送到信号量。
否则,您可以执行常规轮询检查所有项目的完成,但确保线程在轮询循环中进入休眠状态一段时间。