Russian Qt Forum

Qt => Базы данных => Тема начата: asrael от Январь 06, 2011, 16:24



Название: Remaining time в SQLite
Отправлено: asrael от Январь 06, 2011, 16:24
всем доброго времени..
проблема..
обрабатываю данные и добавляю их в БД. это все занимает довольно-таки длительное время.. как можно рассчитать оставшееся время?
пытался рассчитывать среднее время за одну операцию, а потом умножать на количество оставшихся, но, если процесс идет неравномерный, то погрешность большая очень выходит..


Название: Re: Remaining time в SQLite
Отправлено: twp от Январь 06, 2011, 17:14
имхо не реально. А зачем это нужно?


Название: Re: Remaining time в SQLite
Отправлено: asrael от Январь 06, 2011, 17:22
да почему нереально? реально.. кода с собой сейчас нет, буду вечером дома - выложу..
зачем? ну, а зачем делают таймер оставшегося времени? чтоб знать, сколько нам осталось..) знать, успеешь кофе выпить и покурить, пока база обновляется или нет.. лично у меня спортивный интерес..


Название: Re: Remaining time в SQLite
Отправлено: Ayanami_Rey от Январь 06, 2011, 17:26
как вариант считать не по одной операции, а среднее время допустим за все предыдущие операции и умножать на оставшиеся...
и того получим не конкретное оставшееся время, а среднестатистическое (мб чуть выше реального, а мб и чуть ниже)


Название: Re: Remaining time в SQLite
Отправлено: asrael от Январь 06, 2011, 17:53
так в любом случае получится приблизительно, ведь скорость выполнения зависит от многих параметров, доступность ресурсов ПК, например..
как вариант считать не по одной операции, а среднее время допустим за все предыдущие операции и умножать на оставшиеся...
и того получим не конкретное оставшееся время, а среднестатистическое (мб чуть выше реального, а мб и чуть ниже)
ну, я примерно так и делал.. не помню уже, сегодня ночью сочинял..)


Название: Re: Remaining time в SQLite
Отправлено: twp от Январь 06, 2011, 17:59
ну в таких случаях лучше повесить прогрессбар, и наглядно и не нужно вычислять сколько времени еще осталось


Название: Re: Remaining time в SQLite
Отправлено: asrael от Январь 06, 2011, 18:10
прогрессбар повешен и работает - с ним проблем не было.. но процент выполнения - это одно, а оставшееся время - это совсем другое..


Название: Re: Remaining time в SQLite
Отправлено: Ayanami_Rey от Январь 06, 2011, 18:21
гы. тогда посоветую пользоваться алгоритмами расчета погоды. и точность уже будет зависеть от кол-ва накопленных данных и вычислительной мощности компьютера.
имхо 100% точно рассчитать оставшееся время выполнения операции при обращении к бд невозможно.


Название: Re: Remaining time в SQLite
Отправлено: asrael от Январь 06, 2011, 18:31
так я на точность и не настаиваю.. мне нужно приблизительное значение.. а изобретать заново велосипед не хочется, ибо это далеко не самая главная функция моей программы и рядовой пользователь вряд ли её вообще когда-то увидит и оценит..)
повторяюсь, это всего лишь спортивный интерес..


Название: Re: Remaining time в SQLite
Отправлено: Ayanami_Rey от Январь 06, 2011, 20:04
тогда не вижу причины, по которой не удовлетворяет среднее время выполнения всех предыдущих операций*на кол-во оставшихся.


Название: Re: Remaining time в SQLite
Отправлено: asrael от Январь 06, 2011, 23:05
вот, собственно, мой велосипед - это то, что происходит в Timer'e. интервал, понятно - секунда:
Код:
void Open_form::update()
{
    time++; //общее количество прошедших секунд
    //row_count - количество записей для обработки
    //cur_row - текущая запись
    double sec_val = row_count*time/cur_row - time;
    double min_val = sec_val/60;
    sec_val = ceil(sec_val);
    min_val = ceil(min_val);

    sec_val = 59 + sec_val - min_val*60;

    time_rem.setHMS(0,min_val-1,sec_val,0);
    label_rem_time->setText(tr("Time remaining: ")+time_rem.toString("HH:mm:ss"));
}
Ayanami_Rey, кто сказал, что меня что-то не устраивает? я просто ищу более оптимальные способы решения данной задачи, вот и всё..)