CreateMemoryResourceNotification()没能捕捉到内存耗尽的事件,为什么?解决方案

CreateMemoryResourceNotification()没能捕捉到内存耗尽的事件,为什么?
我写了一个很小的测试程序来测试耗尽内存时Api能否捕获内存事件:
C/C++ code

void WINAPI f(LPVOID){
    while(true)int*p=new int[655360];
}
int main(void){
    HANDLE hMem=CreateMemoryResourceNotification(LowMemoryResourceNotification);
    HANDLE hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)f,NULL,0,NULL);
    if(INVALID_HANDLE_VALUE==hThread){
        return 1;
    }
    HANDLE h[2]={hMem,hThread};
    WaitForSingleObject(hThread,INFINITE);
    while(true){
        DWORD dwWait=WaitForMultipleObjects(2,h,TRUE,INFINITE);
        if(dwWait==WAIT_OBJECT_0+1){
            printf("low mem\n");
        }
    }
    return 0;
}

我运行程序,一开始程序会涨到几百M内存,然后迅速掉到10M左右。可是一直都没打印low mem这句话。程序似乎陷入了死循环了。这是为什么呢,我的程序有什么问题?


------解决方案--------------------
没有这个保证,但尽量防止
你看windows internals的第9章