Russian Qt Forum

Программирование => С/C++ => Тема начата: smirnoff от Май 16, 2011, 22:11



Название: Как определить количество процентов в цикле?
Отправлено: smirnoff от Май 16, 2011, 22:11
Есть код:
Цитировать
...
for(int i = 0; i < (file.size() / 128); i++)
           {
               in.readRawData(kod, 17);
               in.readRawData(kod2, 17);
               in.readRawData(data, 11);
               in.readRawData(mars, 53);
               in.readRawData(data2, 30);

               query.prepare("INSERT INTO MR_FILE (kod, kod2, data, mars, data2)" "VALUES(:kod, :kod2, :data, :mars, :data2);");

               query.bindValue(":kod", QString(kod).left(17));
               query.bindValue(":kod2", QString(kod2).left(17));
               query.bindValue(":data", QString(data).left(11));
               query.bindValue(":mars", QString(mars).left(53));
               query.bindValue(":data2", QString(data2).left(30));

               query.exec();

               // ТУТ НАДО ВЫВОДИТЬ КОЛ-ВО ПРОЦЕНТОВ
               //out << (i * 100 * 128) / (file.size()) << "%... ";

           }

Как организовать вывод в консоль (out << ...) информации о ходе выполнения работы цикла в процентах? Например, выводить с шагом 5%, т.е. 5%... 10%... 15%... и т.д.


Название: Re: Как определить количество процентов в цикле?
Отправлено: LisandreL от Май 16, 2011, 23:20
Например:

Код:
#include <QDebug>

qDebug()<< (i * 100 * 128) / (file.size()) << "%... ";

Но можно и по старинке через std::cout.


Название: Re: Как определить количество процентов в цикле?
Отправлено: smirnoff от Май 17, 2011, 09:23
Например:

Код:
#include <QDebug>

qDebug()<< (i * 100 * 128) / (file.size()) << "%... ";

Но можно и по старинке через std::cout.

Это не работает!!! Вы бы сначала попробовали, либо прикинули что получится...
Тут file.size() - размер файла в байтах. Каждые 128 байт работает вывод на экран. Вы представляете сколько раз сработает вывод?


Название: Re: Как определить количество процентов в цикле?
Отправлено: Fess от Май 17, 2011, 09:31
Уважаемый, тут вам никто ничего не должен.
Если не хотите отрабатывать вывод по количеству обработанных байт, то замеряйте время через QTime и если прошло более x сек выводите сообщение с процентами.
Или сохраняйте последний рассчитанный процент и если он меньше текущего на шаг x, то выводите.
Т.е. считаете всегда, а выводите только иногда в обоих случаях.


Название: Re: Как определить количество процентов в цикле?
Отправлено: Fat-Zer от Май 17, 2011, 09:32
ну так поставьте делитель перед этим, что-то типа if(i%(file.size() / 128 / 20)==0)

ЗЫ: file.size() лучше сохранить в какую-либо переменную.


Название: Re: Как определить количество процентов в цикле?
Отправлено: Denjs от Май 17, 2011, 11:48
Это не работает!!! Вы бы сначала попробовали, либо прикинули что получится...
Тут file.size() - размер файла в байтах. Каждые 128 байт работает вывод на экран. Вы представляете сколько раз сработает вывод?
так вы определитесь пожалуйста - "у вас это не работает" или "оно слишком много чего выводит в консоль".

А потом, соответственно, по отдельности решайте эти проблемы.


Название: Re: Как определить количество процентов в цикле?
Отправлено: Igors от Май 17, 2011, 13:45
Как организовать вывод в консоль (out << ...) информации о ходе выполнения работы цикла в процентах? Например, выводить с шагом 5%, т.е. 5%... 10%... 15%... и т.д.
Этот шаг не привязан ко времени и получится или все проскочит слишком быстро или наоборот, создаст впечатление "зависания". Лучше так

Код
C++ (Qt)
const int timeStep = 1000; // печатаем проценты 1 раз в секунду
QTime t1 = QTime::currentTime();
for(int i = 0; i < (file.size() / 128); i++)
          {
             ...
              QTime t2 = QTime::currentTime();
              if (t1.msecsTo(t2) > timeStep) {
               t1 = t2;
               out << (i * 100 * 128 / file.size()) << "%... ";
              }
          }
 


Название: Re: Как определить количество процентов в цикле?
Отправлено: smirnoff от Май 17, 2011, 20:23
Как организовать вывод в консоль (out << ...) информации о ходе выполнения работы цикла в процентах? Например, выводить с шагом 5%, т.е. 5%... 10%... 15%... и т.д.
Этот шаг не привязан ко времени и получится или все проскочит слишком быстро или наоборот, создаст впечатление "зависания". Лучше так

Код
C++ (Qt)
const int timeStep = 1000; // печатаем проценты 1 раз в секунду
QTime t1 = QTime::currentTime();
for(int i = 0; i < (file.size() / 128); i++)
          {
             ...
              QTime t2 = QTime::currentTime();
              if (t1.msecsTo(t2) > timeStep) {
               t1 = t2;
               out << (i * 100 * 128 / file.size()) << "%... ";
              }
          }
 

Спасибо. Все работает!