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

本文介绍了利用Visual C++ 2015建立MultiThread对话框并添加多线程用户界面线程的过程。在使用中,点击启动和关闭线程按键后再次启动出现错误。经分析,是线程变量内存分配问题,应将内存分配从初始化函数移至按键处理函数内部来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用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"));
}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值