CreateMemoryResourceNotification()没能捕捉到内存耗尽的事件,为什么?解决方案
CreateMemoryResourceNotification()没能捕捉到内存耗尽的事件,为什么?
我写了一个很小的测试程序来测试耗尽内存时Api能否捕获内存事件:
我运行程序,一开始程序会涨到几百M内存,然后迅速掉到10M左右。可是一直都没打印low mem这句话。程序似乎陷入了死循环了。这是为什么呢,我的程序有什么问题?
------解决方案--------------------
没有这个保证,但尽量防止
你看windows internals的第9章
我写了一个很小的测试程序来测试耗尽内存时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章