请高手进来看看,一个不是多线程应用占用CPU达到98%(在线等待)

hoffen 2003-10-09 03:40:04
我用CSplitterWnd分了主窗口后,然后在每个视中画图做界面用,可这个程序占用CPU达到98%,不是为什么?
...全文
31 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hoffen 2003-10-09
  • 打赏
  • 举报
回复
可能没有吧,我所有的CDC、CPen、CBrush类都及时地放了。
hoffen 2003-10-09
  • 打赏
  • 举报
回复
CView::OnPaint()会不会产生这样的情况呀?
hoffen 2003-10-09
  • 打赏
  • 举报
回复
void CShowBitmap::DrawBitmap(int Left,int Top,int From,int To,CDC* pDC)
{
//Is the filename loaded
if(!IsFileLoaded)
{
MessageBox(NULL,"The filename of bitmap has not been loaded!","ERROR",MB_OK|MB_ICONERROR);
return;
}
//To open the bitmap file
CFile file;
if(!file.Open("Bmps/"+FileName,CFile::modeRead,NULL))
{
MessageBox(NULL,"Can not open the bitmap file!","ERROR",MB_OK|MB_ICONERROR);
return;
}
//To read the BITMAPFILEHEADER
BITMAPFILEHEADER bfHeader;
if(file.Read((void*)&bfHeader,sizeof(BITMAPFILEHEADER))!=sizeof(BITMAPFILEHEADER))
{
MessageBox(NULL,"Can not read the BITMAPFILEHEADER!","ERROR",MB_OK|MB_ICONERROR);
file.Close();
return;
}
//To read the BITMAPINFOHEADER
BITMAPINFOHEADER biHeader;
if(file.Read((void*)&biHeader,sizeof(BITMAPINFOHEADER))!=sizeof(BITMAPINFOHEADER))
{
MessageBox(NULL,"Can not read the BITMAPINFOHEADER!","ERROR",MB_OK|MB_ICONERROR);
file.Close();
return;
}
//Calculate the colors
int nColors=0;
if(biHeader.biBitCount<24) //if the RGBQUAD is in the data file
{
nColors=1<<biHeader.biBitCount;
}
//Contribute the memory for the new BITMAPINFO
BITMAPINFO* pBi;
pBi=(BITMAPINFO*) new BYTE[sizeof(BITMAPINFOHEADER)+nColors*sizeof(RGBQUAD)];
memcpy(pBi,&biHeader,sizeof(BITMAPINFOHEADER));
//Read the RGBQUAD
RGBQUAD* pQuad;
pQuad=(RGBQUAD*)((BYTE*)pBi+sizeof(BITMAPINFOHEADER));
if(file.Read((void*)pQuad,nColors*sizeof(RGBQUAD))!=nColors*sizeof(RGBQUAD))
{
MessageBox(NULL,"Can not read the RGBQUAD!","ERROR",MB_OK|MB_ICONERROR);
file.Close();
return;
}
//Read the image data
void* pImageData;
biHeader.biSizeImage=bfHeader.bfSize-bfHeader.bfOffBits;
pImageData=(void*) new BYTE[biHeader.biSizeImage];
if(file.Read(pImageData,biHeader.biSizeImage)!=biHeader.biSizeImage)
{
MessageBox(NULL,"Can not read the IMAGE DATA!","ERROR",MB_OK|MB_ICONERROR);
file.Close();
return;
}
//Draw the picture
//From: Scan start line
//To: Line to Scan to
SetDIBitsToDevice(pDC->GetSafeHdc(),Left,Top,biHeader.biWidth,biHeader.biHeight,
0,0,From,To,pImageData,pBi,DIB_RGB_COLORS);
//Close the file and release the memory
file.Close();
delete pBi;
delete pImageData;
}
wuxfBrave 2003-10-09
  • 打赏
  • 举报
回复
给出你画图的代码,应该是这里出了问题
hoffen 2003-10-09
  • 打赏
  • 举报
回复
那些情况会生产GDI资源泄漏?
hujun614 2003-10-09
  • 打赏
  • 举报
回复
你调试跟踪,仔细检查吧,多半是陷入死胡同里了。
wuxfBrave 2003-10-09
  • 打赏
  • 举报
回复
肯定是画图的代码出了问题
xiaohyy 2003-10-09
  • 打赏
  • 举报
回复
可能有gdi资源泄露

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧