33,311
社区成员
发帖
与我相关
我的任务
分享
//begin to load
function1();
SendMessage(hProgress,33,...);
function2();
SendMessage(hProgress,66,...);
function3();
SendMessage(hProgress,100,...);
//loading ends
同样只要大体均匀即可,相信没有用户会无聊到掐秒表的。
PS:玩魔兽3,在加载地图的时候,我就发现进度条好像仅分成三段,在不均匀的三次移动后还要卡一会才进游戏。这么多年来早已习惯,也不觉有什么大不了的。
//demo for observer pattern
#include <iostream>
#include <Windows.h>
struct Worker;
struct UI
{
void reg(Worker* worker)
{
worker_ = worker;
}
virtual void Notify();
private:
Worker* worker_;
};
struct Worker
{
Worker()
: total_(100), finished_(0)
{
}
virtual void update(double& total, double& finished)
{
total = total_;
finished = finished_;
}
void working(UI* ui_)
{
while(finished_ < total_)
{
finished_ += total_ * 0.05;
ui_->Notify();
Sleep(500);
}
std::cerr << std::endl;
}
private:
double total_, finished_;
};
void UI::Notify()
{
double t, f;
worker_->update(t,f);
std::cerr << "\b\b\b\b=== " << (int)(f / t * 100) << "%";
}
int main(int argc, char* argv[])
{
UI ui;
Worker worker;
ui.reg(&worker);
worker.working(&ui);
return 0;
}