高手们帮帮忙:系统资源严重不足! 是不是你的GDI对象从来只申请不释放?特别注意在循环中创建的语句。我编过一个不断地创造画刷的程序,可以将系统资源耗尽,系统菜单弹出来有整个屏幕那么长... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用BoundsChecker检查检查好了。:) 我的程序里面有这段代码:HWND hwnd=::GetDesktopWindow();HDC hdc=::GetWindowDC(hwnd);for(int i=1;i<=20;i++) for(int j=1;j<=10;j++) m_Broad[i][j]=GetPixel(hdc,m_PosX+j*16-8,m_PosY+i*16-8);是不是这段代码引起的?请问怎样释放?谢谢大家!我加分! 还有:this->ShowWindow(SW_SHOWMINIMIZED); HWND hwnd1=::FindWindow(NULL,"程序一");if (!hwnd1){ m_PosX=550; hwnd1=::FindWindow(NULL,"程序二"); if (!hwnd1) { this->ShowWindow(SW_RESTORE); AfxMessageBox("请先运行那个程序!"); return; }}::SetForegroundWindow(hwnd1);::ShowWindow(hwnd1,SW_MAXIMIZE);Sleep(500); 系统的资源减少,却没有发现,一般只有一种情况: 在删除GDI资源时,它还在DC中选用! 永远都不要忘了使用完GDI后 SelectObject(OldGDI); GetDC 后有没有ReleaseDC,DeleteDC?次序:CGdi gdiNew;oldGdi =SelectObject(newGdi)SelectObject(oldGdi)DeleteObject(newGdi) 我把程序简化到只有以下东西,最终我确定是这个在减少系统资源:void CTempDlg::OnOK() { while (1==1) { Start(); }}void CTempDlg::Start() { HWND hwnd=::GetDesktopWindow(); HDC hdc=::GetWindowDC(hwnd);}请问高手们,为什么,我该怎么办?谢谢! 在Start() 调用完成后closehandle hwnd和hdc再试验一下。 类似Start(){....CloseHandle(hDC);CloseHandle(hWnd);} 把 HWND hwnd HDC hdc定义成全局变量可以吗? 在Start中要使用这样一个函数:int ReleaseDC( HWND hWnd, // handle to window HDC hDC // handle to DC);而Window的Handle则不用Close。 呵呵。你说的对。那结果怎么样。系统资源是否还是100%? 不过既然你用了死循环,CPU肯定会100%。 void CTempDlg::Start() { HWND hwnd = NULL; HDC hdc = NULL; hwnd = ::GetDesktopWindow(); if( hwnd ) { hdc = ::GetWindowDC(hwnd); if( hdc ) ReleaseDC(hdc); }}// Just Test 有关bcg的问题 在非MFC中WM_PAINT是什么处理的,请求大家帮助啊。 请问怎样把WINDOWS XP自带的弹出窗口阻止程序杀掉???相当于把这功能卸载 DCOM的问题 究竟BitBlt在屏幕上的图像和直接用一个lineto画出的图像有什么区别? 高分求vc+SQLserver2000数据库开发的资料或书籍。 在VC中运行纯C++应注意些什么 帮忙看一下代码,为什么编译不能通过? 用Sheet Dialog 怎么老死! 检测网络连接的代码为什么不好使呢 Delphi中的跳转语句怎么用?这是的人气高些 关于C++语法的问题?
:)
HWND hwnd=::GetDesktopWindow();
HDC hdc=::GetWindowDC(hwnd);
for(int i=1;i<=20;i++)
for(int j=1;j<=10;j++)
m_Broad[i][j]=GetPixel(hdc,m_PosX+j*16-8,m_PosY+i*16-8);是不是这段代码引起的?请问怎样释放?谢谢大家!我加分!
this->ShowWindow(SW_SHOWMINIMIZED);
HWND hwnd1=::FindWindow(NULL,"程序一");
if (!hwnd1)
{
m_PosX=550;
hwnd1=::FindWindow(NULL,"程序二");
if (!hwnd1)
{
this->ShowWindow(SW_RESTORE);
AfxMessageBox("请先运行那个程序!");
return;
}
}
::SetForegroundWindow(hwnd1);
::ShowWindow(hwnd1,SW_MAXIMIZE);
Sleep(500);
永远都不要忘了使用完GDI后 SelectObject(OldGDI);
ReleaseDC,DeleteDC?次序:
CGdi gdiNew;
oldGdi =SelectObject(newGdi)
SelectObject(oldGdi)
DeleteObject(newGdi)
最终我确定是这个在减少系统资源:void CTempDlg::OnOK()
{
while (1==1)
{
Start();
}
}void CTempDlg::Start()
{
HWND hwnd=::GetDesktopWindow();
HDC hdc=::GetWindowDC(hwnd);}
请问高手们,为什么,我该怎么办?谢谢!
closehandle hwnd和hdc再试验一下。
Start()
{
....CloseHandle(hDC);
CloseHandle(hWnd);}
HDC hdc定义成全局变量可以吗?
int ReleaseDC(
HWND hWnd, // handle to window
HDC hDC // handle to DC
);
而Window的Handle则不用Close。
{
HWND hwnd = NULL;
HDC hdc = NULL;
hwnd = ::GetDesktopWindow();
if( hwnd )
{
hdc = ::GetWindowDC(hwnd);
if( hdc )
ReleaseDC(hdc);
}
}
// Just Test