MFC CWinThread

来源:百度知道 编辑:UC知道 时间:2024/06/15 12:56:04
MFC对话框工程; 部分代码如下
void CPppDlg::OnOK()
{
CWinThread *th = AfxBeginThread(threadPoc, this);
}
UINT CPppDlg::threadPoc(LPVOID lp)
{
while (1)
{
CUIThread *dlg = new CUIThread; // CUIThread类是CWinThread类的派生类
dlg->CreateThread();
Sleep(1000);
}
return 0;
}

CUIThread类的部分代码;
BOOL CUIThread::InitInstance()
{
NewDlg *dlg = new NewDlg; // 新插入的一个对话框
dlg->Create(IDD_NEWDLG_DIALOG, NULL);
dlg->ShowWindow(SW_SHOW);
dlg->th = this;
return TRUE;
}

NewDlg类的部分代码;
NewDlg.h
public:
CUIThread *th;
NewDlg.cpp
void NewDlg::OnClose()
{
th->PostThreadMessage(WM_QUIT,0,0);
CDialog::OnClose();
}

在主窗口中点击OK按钮后就会创建一个线程,该线程会不断的创建NewDlg窗口,问题出在关闭NewDlg窗口时有时会出现如下图情况,请各位前辈们帮帮我,小弟我在此跪谢!
内存确实在长,但不是蛮快,还有如果点两下OK铵钮,也就是创建两个这样的线程时,更容易出现如图的现像,请问怎么解决了?

while (1)
{
CUIThread *dlg = new CUIThread; // CUIThread类是CWinThread类的派生类
dlg->CreateThread();
Sleep(1000);
}
是这里一直在New 时间长了导致内存溢出吧应该,你在运行程序时,打开任务管理器,看下该程序的内存是否在增长

修改:不知道好使不
CUIThread *dlg=NULL;
while (1)
{
if(dlg==NULL)
dlg = new CUIThread;
else
{
delete dlg;
dlg=new CUIThread;
}
dlg->CreateThread();
Sleep(1000);
}