检测多个异步回调的结束

时间:2011-06-23 19:49:51

标签: windows

我有一些代码将所有窗口句柄收集到一个数组中。问题是,由于回调是异步完成的,我不知道枚举实际上是什么时候完成的。解决这个问题的最佳方法是什么?我认为这是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
}

2 个答案:

答案 0 :(得分:0)

EnumWindows回调是同步的,而不是异步的。不需要等待。 EnumWindows之后的代码只有在所有回调完成后才会执行...

答案 1 :(得分:0)

我不是Windows API专家,但这是一般编程问题。

如果您有权访问可以wait(),signal()并给出项目计数的信号量类型结构,那么您可以阻止该线程,直到达到某个计数。然后,对窗口的每个异步查询都将信号()发送到信号量。

否则,您可以执行常规轮询检查所有项目的完成,但确保线程在轮询循环中进入休眠状态一段时间。