试图实施一个基本的进展指标

时间:2013-10-19 14:54:12

标签: c++ progress-bar

我有一个模板类,我用来加载文本文件中的数据,我想要实现一个基本的进度指示器,因为数据集非常大..

这是代码:

template <class T>
    void loadCustomers(const char* fileName, T& container)
    {
        ifstream fin(fileName, ios_base::in);
        int line = 0;
        char c;
        cout << "Loading " << fileName << ": ";
        while (fin)
        {
            line++;
            if (line % (custSize/10) == 0)
                cout << " *";

            Customer *temp;

            try
            {
                c = fin.peek(); 
                if (c == ios::traits_type::eof())
                    break;
                else if (c == 'C')
                    temp = new Customer();
                else
                    throw boost::bad_lexical_cast();

                fin >> *temp;
                container.addElementByDate(temp);
            }
            catch(boost::bad_lexical_cast&)
            {
                cerr << "Bad data found at line " << line 
                    << " in file "<< fileName << endl;
            }
        }

        fin.close();
        cout << endl;
    }

代码可以正常加载文件,所以这不是问题(非常感谢这个论坛上有帮助的人!)

基本上我只是希望它在屏幕上再次加载10%时会在屏幕上打印一个新的“*”,但是当我运行它时,它会加载整个程序而不打印“Loading customers.txt:” cout ..

基本上我运行程序,加载大约30秒,然后立即打印:

Loading customers.txt  * * * * * * * * * *

有没有人知道可能会发生什么事情?我该怎么做才能强制它打印到屏幕上?

1 个答案:

答案 0 :(得分:0)

您应该刷新流以“强制”它以在每次进度前显示数据:

cout.flush();