Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: d91 en 27 Abril 2014, 03:18 am



Título: barra de progreso en c++
Publicado por: d91 en 27 Abril 2014, 03:18 am
hola a toda la comunidad, solo necesito implementar una barra de progreso en c++, por ejemplo tengo un archivo txt y lo necesito cargar a una determinada estructura; pero tengo que mostrar el avance de la carga, ya he buscado como hacer las barras, pero las que he hecho solo funcionan con un ciclo for o con la funcion sleep donde yo decido cuanto se tardara en llenar, lo que ya se como hacer es contar el tiempo que ha durado la carga del archivo, pero no se como contar el tiempo restante para la carga que creo ayudaria a llenar la barra  agradecere las ideas.


Título: Re: barra de progreso en c++
Publicado por: El Benjo en 27 Abril 2014, 06:14 am
Lo que puedes hacer para determinar el tiempo restante, es una simple operación como la siguiente.

TiempoRestante = (BytesLeídos / TiempoDeActividad) * (BytesTotalesALeer - BytesLeídos)

Saludos. Espero te funcione.  :)


Título: Re: barra de progreso en c++
Publicado por: amchacon en 27 Abril 2014, 10:24 am
(Bytes leidos / Bytes totales)*100

Eso te dira que porcentaje de la barra tienes que colorear. Aun asi tendras que poner un sleep para actualizar cada X tiempo (si lo haces en tiempo real sera un desperdicio de recursos).

Una actualización por segundo esta bien.


Título: Re: barra de progreso en c++
Publicado por: El Benjo en 27 Abril 2014, 20:15 pm
Me supongo que la lectura la haces leyendo x bytes del archivo de una vez y no byte por byte. De ser así, puedes poner la operación después de cada lectura, y no se desperdicia tanto tiempo. Paso a explicar:

Suponiendo que haces la lectura de 100 000 bytes (100 Kbytes por vez) y tienes un archivo de 10 000 000 (10 Mbytes) entonces:

10 000 000 / 100 000 = 100

De esta manera sólo se realiza esta operación 100 veces. Si manejas archivos más grandes que eso y quieres que sean menos operaciones puedes incrementar el buffer de lectura o incluso no hacer nada. Para los micros actuales donde por 99 euros consigues arriba de 40 Gflops, 100 operaciones aritméticas de división, no son nada. Y dependiendo de la manera en que lo hagas, el presentar la información en la pantalla tampoco debe ser un problema.

Otra cosa, el comentario anterior a este (el de amchacon) te da el porcentaje de la barra. El primer comentario mío te debería dar el tiempo restante. Saludos.


Título: Re: barra de progreso en c++
Publicado por: amchacon en 27 Abril 2014, 21:25 pm
La barra de progueso debe hacerse en un hilo de ejecución aparte para no bloquear el proceso de carga. De hecho yo soy partidario de usar el proceso principal solo para dibujar, todo lo demás en hilos aparte.

El método de benjo es más eficiente pero hay que implementarlo con "condiction variables", y eso complica un poco el asunto. Hacer un refresco cada segundo es mucho más sencillo (duermes el hilo un segundo y listo).