Расчет оставшегося времени
есть задача: подсчет оставшегося времени;
у меня в цикле идет загрузка данных в терминал, через com порт, причем каждая последующая запись грузится медленнее, чем предыдущая.
Как подсчитать время оставшееся до конца загрузки?
Пробовал производить подсчет по формуле арифметической прогрессии, но что-то не очень нравится.
Может, тогда кто-нибудь подскажет, как реализован подсчет оставшегося времени в Far, RAR и др. программах? Хотя бы примерно.
Да очень просто. Берется отрезок времени после начала какого нибудь процесса обработки данных и обрабатывается в течении определенного интервала ну скажем для удобства 1 секунды. теперь мы имеем общее колво данных,обработанное за 1 секунду колво данны и время за которое обработалась данная порци я и соответсвенно можеш сразу приблизительно расчитать сколько всего времени потребуется для оставшегося обема к примеру по такой формуле
//время
оставшеся время_1 = общее_колво_данных / колво_ данных_обработанных_за_1_секунду ;
//обработанный объем
обработанное_колво_данных+=колво_ данных_обработанных_за_1_секунду;
Ну вот теперь мы приблизительно можем сказать юзеру скоко примерно осталось секунд на обработку всего обема данных.
И затем в прцессе обработки корректируем это значение оп новой вычисляя уже по такой формуле
//время
оставшеся время_2 = (общее_колво_данных-обработанное_колво_данных) / колво_ данных_обработанных_за_1_секунду (секунды)
//обработанный объем
обработанное_колво_данных+=колво_ данных_обработанных_за_1_секунду;
надеюсь ты уловил смысл. А уж как ты там будеш учитывать прошедшее время и колво обработанных данных это твое дело. Можеш в отдельный поток вынести а можеш прям в обработчике данных прописать. Короче на че твоей фантазии хватит.
Да очень просто. Берется отрезок времени после начала какого нибудь процесса обработки данных и обрабатывается в течении определенного интервала ну скажем для удобства 1 секунды. теперь мы имеем общее колво данных,обработанное за 1 секунду колво данны и время за которое обработалась данная порци я и соответсвенно можеш сразу приблизительно расчитать сколько всего времени потребуется для оставшегося обема к примеру по такой формуле
//время
оставшеся время_1 = общее_колво_данных / колво_ данных_обработанных_за_1_секунду ;
//обработанный объем
обработанное_колво_данных+=колво_ данных_обработанных_за_1_секунду;
Ну вот теперь мы приблизительно можем сказать юзеру скоко примерно осталось секунд на обработку всего обема данных.
И затем в прцессе обработки корректируем это значение оп новой вычисляя уже по такой формуле
//время
оставшеся время_2 = (общее_колво_данных-обработанное_колво_данных) / колво_ данных_обработанных_за_1_секунду (секунды)
//обработанный объем
обработанное_колво_данных+=колво_ данных_обработанных_за_1_секунду;
надеюсь ты уловил смысл. А уж как ты там будеш учитывать прошедшее время и колво обработанных данных это твое дело. Можеш в отдельный поток вынести а можеш прям в обработчике данных прописать. Короче на че твоей фантазии хватит.
спасибо