Russian Qt Forum
Ноябрь 23, 2024, 22:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как определить количество процентов в цикле?  (Прочитано 4121 раз)
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%... и т.д.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Май 16, 2011, 23:20 »

Например:

Код:
#include <QDebug>

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

Но можно и по старинке через std::cout.
Записан
smirnoff
Гость
« Ответ #2 : Май 17, 2011, 09:23 »

Например:

Код:
#include <QDebug>

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

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

Это не работает!!! Вы бы сначала попробовали, либо прикинули что получится...
Тут file.size() - размер файла в байтах. Каждые 128 байт работает вывод на экран. Вы представляете сколько раз сработает вывод?
Записан
Fess
Гость
« Ответ #3 : Май 17, 2011, 09:31 »

Уважаемый, тут вам никто ничего не должен.
Если не хотите отрабатывать вывод по количеству обработанных байт, то замеряйте время через QTime и если прошло более x сек выводите сообщение с процентами.
Или сохраняйте последний рассчитанный процент и если он меньше текущего на шаг x, то выводите.
Т.е. считаете всегда, а выводите только иногда в обоих случаях.
Записан
Fat-Zer
Гость
« Ответ #4 : Май 17, 2011, 09:32 »

ну так поставьте делитель перед этим, что-то типа if(i%(file.size() / 128 / 20)==0)

ЗЫ: file.size() лучше сохранить в какую-либо переменную.
Записан
Denjs
Гость
« Ответ #5 : Май 17, 2011, 11:48 »

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

А потом, соответственно, по отдельности решайте эти проблемы.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Май 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()) << "%... ";
              }
          }
 
Записан
smirnoff
Гость
« Ответ #7 : Май 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()) << "%... ";
              }
          }
 

Спасибо. Все работает!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.089 секунд. Запросов: 23.