MFC+多线程+对话框+进度条

本文介绍如何在MFC对话框中使用多线程控制进度条,通过创建两个子线程分别处理长时间任务和更新进度条,实现数据处理与进度显示同步。

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

当某段代码执行时间过长时,导致界面一直处于一个状态,不可进行其他操作时,这时使用进度条来告诉用户处理进度是相当必要的。下面介绍在MFC下,如何使用多线程在对话框中控制进度条。

这里写图片描述

首先,创建一个对话框,并建立与其对应的类,当然需要添加一个进度条控件。如下图
MFC+多线程+对话框+进度条

然后在对话框对应的类中添加两个函数:
void CJingDuTiao::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default

CDialog::OnTimer(nIDEvent);
//CDialog::OnTimer(nIDEvent);
m_ctrlProgress.SetPos(CGlobal::progress);
if(CGlobal::progress == -1)
this->EndDialog(true);
}
void CJingDuTiao::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus);

// TODO: Add your message handler code here
this->KillTimer(1);
this->SetTimer(1,20, NULL);
m_ctrlProgress.SetRange(1,1000);
}
其中progress是在类CGlobal中定义的一个静态变量,且初始值为0.
m_ctrlProgress为进度条的变量。

再在主程序(MainFrm)中添加两个子进程需要处理的函数
如:
UINT function(LPVOID pParam)
{
for(int i = 0; i < 1000; i++){
CGlobal::progress++;
Sleep(50);
}
CGlobal::progress = -1;
return 0;
}
这个函数(function)是用来控制进度条变化的函数。
UINT function1(LPVOID pParam)
{
//=============
在此添加需要处理长时间的代码
//==============
return 0;
}

最后在需要运动进度条的地方添加
AfxBeginThread(function1,this);//申请一个进程来执行function1,也就是主程序处理代码。
AfxBeginThread(function,this);//在申请一个进程来执行function,控制进度条的变化。
dlg1->DoModal();//模态显示对话框,此时主程序代码执行到此,不往下执行,直至对话框关闭,但是两个
//子进程始终在运行中。
其中dlg1是对话框的一个对象。
这样一个同事处理数据且显示进度条对话框的功能就实现了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值