MFC中进度条的多线程问题

a747836668 2013-12-03 10:18:19
求助大神~~~
我有一个大的数据处理函数,比较耗时间,想用进度条来显示其进度。
这是一个按钮事件函数
void CCorrect::OnBnClickedOk()
{

int Select=Subject.GetCurSel();
MessageBox(_T("程序正在进行中,请耐心等待"));
locale::global(locale(""));
c_Proce.SetRange(0,100);
c_Proce.SetPos(40); //在数据处理前设置进度条
Sys.Correct(Select); //一个大的数据处理函数
locale::global(locale("C"));
// TODO: 在此添加控件通知处理程序代码
//OnOK();
}
运行时,开始进度条没反应,只有等到数据处理函数做完后才会显示。这是为什么。怎样才能做到实时更新进度条
急,求各位大神帮帮忙,谢谢了

...全文
121 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
忘世麒麟 2013-12-04
  • 打赏
  • 举报
回复
使用SetTimer函数,每隔几秒捕获数据处理进度,然后更新进度条。
忘世麒麟 2013-12-04
  • 打赏
  • 举报
回复
你的进度条没有设置状态更改规则,比如0.5秒之后获得数据处理进度,然后让进度条的进度更改。 其次是这条语句之后:“c_Proce.SetPos(40); //在数据处理前设置进度条”使用updateData(FALSE)函数;
starytx 2013-12-04
  • 打赏
  • 举报
回复
将数据处理放在单独的线程中进行,都则会阻塞主进程造成UI“假死”。同时在线程中按照处理的进度向外部UI发送消息,在消息处理中SetPos来更新进度条进度。
yu.sang 2013-12-04
  • 打赏
  • 举报
回复
不太熟悉这方面的,但是,提示下, 1)你有没有更新界面啊? 2)一般把大数据处理放在一个线程中,需要显示的时候,就发消息给主线程进行显示,因为如果把大数据处理放在主进程,界面会卡死的,没法显示。

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧