MFC 多线程用户界面代码出现“file:f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.cpp Line:532”错误分析

利用Visual C++ 2015建立一个MultiThread的对话框,在此对话框基础上添加多线程用户界面线程,多线程程序

命名为“UIThread”,在主线程程序MultiThreadDlg.h中添加线程变量CUIThread *pThread,然后在主线程程序

MultiThreadDlg.cpp中的BOOL CMultiThreadDlg::OnInitDialog()添加pThread的初始化pThread = new CUIThread();

在主线程界面CMultiThreadDlg添加启动线程的按键处理程序OnBnMultiThread(),在按键处理函数创建用户界面线程

void CMultiThreadDlg::OnBnMultiThread()
{
    // TODO: 在此添加控件通知处理程序代码
    pThread->CreateThread();
    pThread->GetMultiDlg(this);
    m_HideWindow.EnableWindow(TRUE);
    m_ShutThread.EnableWindow(TRUE);
    m_Thread.EnableWindow(FALSE);
    //AfxMessageBox(_T("NI"));
}

主线程界面如下图所示:

其中Thread是启动线程的按键,ShutThread是结束线程的按键,点击Thread启动线程按键,通过ShutThread关闭线程

然后在点击Thread启动线程出现了“file:f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.cpp  Line:532”的错误如下图所示;

原因分析:因为线程变量CUIThread *pThread在主线程OnInitDialog()中分配内存pThread = new CUIThread(),当第一次

启动用户界面线程 pThread->CreateThread();创建了线程,但是如果第一次ShutThread按键关闭线程之后pThread变量

分配的内存被系统收回,如果再次点击启动按键,则在void CMultiThreadDlg::OnBnMultiThread()按键处理函数中没有再

次分配pThread的内存空间而直接创建线程pThread->CreateThread()则系统出错,所以在创建线程是pThread = new CUIThread()分配空间不应该放在OnInitDialog()初始化函数中,而应直接放在void CMultiThreadDlg::OnBnMultiThread()按

键处理函数内部如下所示:

void CMultiThreadDlg::OnBnMultiThread()
{
    // TODO: 在此添加控件通知处理程序代码

    pThread = new CUIThread()
    pThread->CreateThread();
    pThread->GetMultiDlg(this);
    m_HideWindow.EnableWindow(TRUE);
    m_ShutThread.EnableWindow(TRUE);
    m_Thread.EnableWindow(FALSE);
    //AfxMessageBox(_T("NI"));
}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值