MFC创造界面线程时测试提示内存不足
MFC创建界面线程时测试提示内存不足
如题,用网上如下方法创建界面线程,在vs2005中编译调试,界面没有显示,直接提示内存不足,但是实际内存空闲很多,请问这是怎么回事?
创建方法如下:
1.创建MFC对话框程序,添加一个启动用户界面线程的按钮
2.向程序中添加一个对话框,并建立相应的对话框类CThreadDlg,该对话框将被作为用户界面线程的主窗口。
3.向程序中添加一个以CWinThread为基类的新类CUIThread,该类用于启动一个用户界面线程。
4.在UIThread.cpp中加入#include "ThreadDlg.h",并在CUIThread::InitInstance()中加入
CThreadDlg dlg;
m_pMainWnd=&dlg;
dlg.DoModal();
确保InitInstance函数最后return TRUE;
5.CMyThread::InitInstance()中创建的CThreadDlg将与主窗口在独立的线程中运行,可以在CThreadDlg中加入各种执行耗时任务的代码而不会影响主窗口的运行。
6.在主窗口的**dlg.h加入#include "UIThread.h",双击按钮添加CWinThread *pThread=AfxBeginThread(RUNTIME_CLASS(CUIThread));开启线程。
等解释
------解决方案--------------------
线程中是不是占用堆内存超过4MB?
------解决方案--------------------
大约计算下吧。
-
以前好像在那本书里看到的。
上面说错了。
单个函数栈内存使用超过4MB,会导致程序崩溃。
------解决方案--------------------
为什么孙鑫的视频里说是4GB
------解决方案--------------------
如果是一运行就内存不足了,一般不是堆内存用完了,而是栈内存用完了。
而栈内存用完一般是因为有几个函数相互调用,导致递而不归的现象,一下子出来几百万层的堆栈,把栈空间用完了。
可以从这方面找下原因。
也有可能是在某个函数中一下子在栈上面分配了大量的内存,也会导致栈溢出。比如
char buff[1024*1024*1024]这种。
如题,用网上如下方法创建界面线程,在vs2005中编译调试,界面没有显示,直接提示内存不足,但是实际内存空闲很多,请问这是怎么回事?
创建方法如下:
1.创建MFC对话框程序,添加一个启动用户界面线程的按钮
2.向程序中添加一个对话框,并建立相应的对话框类CThreadDlg,该对话框将被作为用户界面线程的主窗口。
3.向程序中添加一个以CWinThread为基类的新类CUIThread,该类用于启动一个用户界面线程。
4.在UIThread.cpp中加入#include "ThreadDlg.h",并在CUIThread::InitInstance()中加入
CThreadDlg dlg;
m_pMainWnd=&dlg;
dlg.DoModal();
确保InitInstance函数最后return TRUE;
5.CMyThread::InitInstance()中创建的CThreadDlg将与主窗口在独立的线程中运行,可以在CThreadDlg中加入各种执行耗时任务的代码而不会影响主窗口的运行。
6.在主窗口的**dlg.h加入#include "UIThread.h",双击按钮添加CWinThread *pThread=AfxBeginThread(RUNTIME_CLASS(CUIThread));开启线程。
等解释
------解决方案--------------------
线程中是不是占用堆内存超过4MB?
------解决方案--------------------
大约计算下吧。
-
以前好像在那本书里看到的。
上面说错了。
单个函数栈内存使用超过4MB,会导致程序崩溃。
------解决方案--------------------
为什么孙鑫的视频里说是4GB
------解决方案--------------------
如果是一运行就内存不足了,一般不是堆内存用完了,而是栈内存用完了。
而栈内存用完一般是因为有几个函数相互调用,导致递而不归的现象,一下子出来几百万层的堆栈,把栈空间用完了。
可以从这方面找下原因。
也有可能是在某个函数中一下子在栈上面分配了大量的内存,也会导致栈溢出。比如
char buff[1024*1024*1024]这种。