为什么QueueUserAPC使得主线程的Wait立刻返回?解决方法

为什么QueueUserAPC使得主线程的Wait立刻返回?
我写了一个很简单的main函数,Wait函数等待一个没有信号的event,10秒钟后超时返回。运行没有问题。
C/C++ code

    HANDLE hThread=OpenThread( THREAD_SET_CONTEXT, FALSE, GetCurrentThreadId());
    HANDLE ah[ 1 ] = { CreateEvent( NULL, TRUE, FALSE, NULL) };
    DWORD dwWait = WaitForMultipleObjectsEx( 1,ah,FALSE,  // wait all
                                             10000, true ); // alertable



但是,如果我加上了一句QueueUserAPC的调用,这个WaitForMultipleObjectsEx就会立刻返回,超时参数没有起作用。
C/C++ code

VOID CALLBACK APCProc(ULONG_PTR dwParam){
    printf("hello, apc timeout\n");
}
... ...
    HANDLE hThread=OpenThread( THREAD_SET_CONTEXT, FALSE, GetCurrentThreadId());
    QueueUserAPC(APCProc,hThread,0);
    HANDLE ah[ 1 ] = { CreateEvent( NULL, TRUE, FALSE, NULL) };
    DWORD dwWait = WaitForMultipleObjectsEx( 1,ah,FALSE,  // wait all
                                             10000, true ); // alertable



这到底是为什么呢? QueueUserAPC有什么特殊的效果么,我只是设定了一个很简单的APC返回参数结果。

------解决方案--------------------
user mode apc就是这样工作的,你的等待是alertable,这样可以执行apc
你可以通过wait的的返回值判断是否由于apc,必要时继续等待
------解决方案--------------------
你先用不是alertable的等待,再用alertable的