MFC-对话框界面卡死
LeNet-5共有7层,不包含输入,每层都包含可训练参数;每个层有多个Feature Map,每个FeatureMap通过一种卷积滤波器提取输入的一种特征,然后每个FeatureMap有多个神经元。各层参数详解:1、INPUT层-输入层首先是数据 INPUT 层,输入图像的尺寸统一归一化为32*32。注意:本层不算LeNet-5的网络结构,传统上,不将输入层视为网络层次结构之一。2、C1层-卷积层
问题:软件操作一会就会卡死,有时切换到桌面再切换回程序也卡死。
刚开始以为是主线程被阻塞,但感觉又不像。界面灰色,但是按钮对应的事件仍响应。看到网上有人说GDI对象泄漏也可能导致界面卡死。
程序有GDI对象泄漏,导致界面卡死。
对于这种情况。通过任务管理器的GDI数据可以发现问题。
(1)Win7系统下首先任务管理器的【查看】->【选择列】出现如下的界面,选择GDI对象。这样在任务管理器中就可以看到进程的GDI对象数目了。如果GDI对象数达到千数量级,那么很有可能是这个原因。
(2)Win10系统
任务管理器的【详细信息】空白位置右击,选择【选择列】,然后勾选【GDI】对象
运行程序,果然GDI对象增长比较快,在GDI对象数量为10000的时候不在增长,界面卡死。
百度了下:有人说GDI对象的最大值默认为10000,这下确认的问题的根源。
注释掉程序中的构造和初始化程序,运行程序依然存在GDI泄露的情况。
最后想只有消息的问题了,进入代码:
BOOL CSPICalibrationDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if (pMsg->message == WM_MBUTTONDBLCLK)
{
POINT ptTmp;
GetCursorPos(&ptTmp);//获取鼠标位置
CRect Rect;
CRect rcPIC;
CWnd* pPICWnd = GetDlgItem(IDC_STATIC_RESIMG);
CDC *pDCPIC = pPICWnd->GetDC();
memset(Rect, 0, sizeof(CRect));
pPICWnd->ClientToScreen(Rect);
}
发现 CDC *pDCPIC = pPICWnd->GetDC();
CDC的指针没有被释放。
更多推荐
所有评论(0)