2007.04.27 10:22 bruce:
虽然已经是NT时代,不像98那样gdi动不动就满了,满屏大字,但微软NT技术仍然有着gdi的限制,只不过是大了很多,经常出现windows不能创建新窗口。
因此,写了一段代码测试一下xp,2003的极限
没想到,windows还是那么的脆弱。
gdi耗尽后,视窗完全没法动弹,瘫痪了。
nt技术中,限制了每个进程最多10,000个gdi的占用,但不断的创建新进程来消耗gdi,nt就挂了
在2003的多任务下试了,每个远程桌面独立管理gdi互相不影响。
但耗尽了gdi的桌面注销后所有程序进程没法完全退出。
代码如下:
HDC hDC;
HPEN hPen;
PAINTSTRUCT Ps;
hDC = BeginPaint(hWnd, &Ps);
while(TRUE){
hPen = CreatePen(PS_DASHDOTDOT, 1, RGB(255, 25, 5));
if(hPen == NULL)
{
char name[MAX_PATH] = {0};
::GetModuleFileName(NULL, name, MAX_PATH);
::ShellExecute(NULL, _T("open"),name,NULL,"",SW_SHOW);
continue;
}
SelectObject(hDC, hPen);
Rectangle(hDC, 1, 1, 2, 2);
//这里不释放gdi句柄hPen
}
