Tiempo restante = tiempo estimado para la descarga del que vaya a tardar más.
Y el tiempo de la descarga de cada fichero es:
Tiempo descarga = parte restante / velocidad por unidad de tiempo.
El problema de calcular el tiempo restante de una descarga múltiple de esta forma es que no tiene en cuenta que cuando un fichero termina normalmente su ancho de banda se reparte entre el resto de los archivos, por lo que la descarga de estos se acelera. Y cuando termina el segundo se acelera aún más... por lo que el tiempo inicial que da el programa generalmente suele ser bastante mayor del tiempo real para finalizar las descargas. En el programa "RapidSucker" que estoy haciendo poco a poco (le pondré una página en breve, aparte del cutreartículo anterior en la página) quería algo más realista, así que el módulo Calculador Casi Realista de Descargas que incluye hace:
En el código del RapidSucker se puede ver una implementación de ejemplo de esto, usando recursividad (y con alguna ñapa interna actualmente, todavía estoy prototipando), en los miembros calculatePendingTime y calculatePendingTimeRec de la clase RapidDownloader.
Este documento no está terminado y se irá ampliando con el tiempo; puede verse una lista de las cuestiones pendientes al final del mismo. La versión actual es la: 0.3 actualizada el 18 de septiembre de 2008. El documento es básicamente un resumen de la documentación de D, traducido, y por lo tanto la mayoría de los ejemplos están tomados de la misma. Aconsejo al lector interesado en el lenguaje que tras leer el artículo y haberse hecho una idea general, lea la referencia completa en digitalmars.com/d.