单线程实习进度条,以及多线程实现进度条(对文件的遍历)

本文介绍了如何在MFC中实现单线程和多线程的进度条同步,特别是在遍历大量文件时。通过创建单独线程处理文件搜索并利用消息传递更新进度条,确保用户界面的实时响应。详细步骤包括控件添加、事件处理、线程创建及文件遍历逻辑。
摘要由CSDN通过智能技术生成

最近在实现一个遍历文件夹,并把进度同步显示在进度条上的小程序。因为对MFC还不熟悉, 所以花了几天的时间研究实现遍历文件夹与进度条的同步实现。最简单的一种进度条的实现方法是单线程的,点一下按钮进度条动一下的方式,这种实现步骤如下:
(一)、单线程进度条实现
首先,添加Progress控件,然后给它添加变量m_pro。其次,添加两个按钮控件:开始、前进。然后,添加两个button事件。
这里写图片描述

void CDemo05Dlg::OnButton1() //开始按钮
   {
        // TODO: Add your control notification handler code here
        m_pro.SetRange(0,100);
        m_pro.SetStep(5);
        m_pro.SetPos(10);
   }
   void CDemo05Dlg::OnButton2() //前进按钮
   {
        // TODO: Add your control notification handler code here
        m_pro.StepIt();
   }

(二)、多线程进度条实现:遍历文件夹,同时进度条显示遍历进度
这里写图片描述

标题
遍历文件夹是一个可大可小的程序,当遍历的路径中文件个数很多时,遍历全部的文件需要耗很长时间,为了不让用户错误的认为系统进入死机的状态,我们给程序加入进度条。但是如果直接添加进度条,在程序中控制他的进度,结果进度条只向前进一步,仍然像死机状态。那该怎么办呢?原因是,我们处理比较大的计算程序时,程序和进度条显示实在同一个进程中进行的,这样程序会先处理计算程序,导致进度条无法实时更新。
解决办法就是把处理大程序的这段逻辑让一个单独的线程去处理,并利用postmessage或sendmessage给主界面发送消息,让主界面去更新进度条。
具体代码和步骤如下。

首先,文本框、按钮、静态文本框、进度条等控件,然后在cpp文件中定义一个关联事件:
#define WM_UPDATEDATA WM_USER + 1999 //定义事件

BEGIN_MESSAGE_MAP(CDemo05Dlg,CDialog)
    ON_MESSAGE(WM_UPDATEDATA,&CDemo05Dlg::OnUpdateData)//让事件与程序关联
END_MESSAGE_MAP

标题

第二步,在头文件中进行函数和变量的声明
afx_msg LRESULT OnUpdateData(WPARAM wParam,LPARAM lParam);
LRESULT onUpdateData(WPARAM wParam,LPARAM lParam);
static

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值