进度条实时显示问题!

[复制链接]
查看11 | 回复10 | 2021-1-27 07:00:24 | 显示全部楼层 |阅读模式
背景:
循环接收数据,并把其存入文件中,需要设置进度条实时显示接收数据的进度。
程序如下:
{
……
m_Progress.SetRange(0,m_Index*1024*1024/256/32);
for(inti=0;i -->
回复

使用道具 举报

千问 | 2021-1-27 07:00:24 | 显示全部楼层
voidDoEvents()
{
if(::PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
在你的程序中
m_Progress.SetPos(i/32);
DoEvents();

回复

使用道具 举报

千问 | 2021-1-27 07:00:24 | 显示全部楼层
我明天试试,不过不太理解呢!我那样写问题出在了哪里?
回复

使用道具 举报

千问 | 2021-1-27 07:00:24 | 显示全部楼层
是否是要显示百分比?
m_Progress.SetRange(0,100);for(inti=0;i<m_Index*1024*1024/256;i++)
{
接收数据并保存;
m_Progress.SetPos(i*100/m_Index*1024*1024/256);}
m_Progress.SetPos(0);
}

回复

使用道具 举报

千问 | 2021-1-27 07:00:24 | 显示全部楼层
for(inti=0;i<m_Index*1024*1024/256;i++)这个循环用得太神奇了吧
回复

使用道具 举报

千问 | 2021-1-27 07:00:24 | 显示全部楼层
进度条一般都是百分比计算,你每次收到数据就更新一下进度条吧,
初始化m_Progress.SetRange(0,100);
进度条计算
m_Progress.SetPos(计算方式就用总数据量*100/接收到的数据量);

回复

使用道具 举报

千问 | 2021-1-27 07:00:24 | 显示全部楼层
如果是百分比得话,那在我程序要求m_Index最小值为128情况下,在程序运行开始会很长时间看不到进度,因为本身该程序要运行一天左右才能结束,那这样的话程序感觉像死掉了,没有达到实时的效果呀!显示百分比的话,又应该如何设置?
回复

使用道具 举报

千问 | 2021-1-27 07:00:24 | 显示全部楼层
首先得问楼主用了多线程没有?没有多线程界面肯定卡死的。
如果用了多线程必须以消息的形式通知主线程(界面线程)SendMessage,PostMessage,毕竟是两个线程的。
回复

使用道具 举报

千问 | 2021-1-27 07:00:24 | 显示全部楼层
没有用多线程,因为我每接收一个函数就做下保存,如果用多线程的话,每次都得起线程,也就是说我得起100多万次线程,这样是不是不会快呀?
回复

使用道具 举报

千问 | 2021-1-27 07:00:24 | 显示全部楼层
得看你线程跑多久。感觉你也不清楚你到底要接收多少东西一样。你的数据是异步接收的么?是的话才要用那么多多线程,不然的话就用一个线程来控制滚动条就够了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行