TEMPO ESTIMADO DE UM PROCESSO NO PROGRESSBAR (P/EXPERTS)

Delphi

15/10/2008

Estou tentando de todas as formas descobrir como os programas de grandes empresas trabalham com aquelas estimativas de tempo sobre o decorrer do processo. Ex. copia de arquivos, calculos, e etc...

Aguém têm algum exemplo ou até mesmo onde posso encontrar a literatura sobre isso, mesmo que envolva matemática pura... Gostaria de contar com a ajuda de todos.

hehehe, estou precisando dormir, me ajudem...

Abraço a todos..... 8)


Juniorvieira

Juniorvieira

Curtidas 0

Respostas

Marcosrocha

Marcosrocha

15/10/2008

Um cálculo que um amigo meu me passou há tempos atrás para calcular o processamento médio de um fetch (While) é o seguinte:

[b:403719b30b]Etapa1[/b:403719b30b]
(Horário de Inicio x Registros Processados) / Quantidade Total de Registros

[b:403719b30b]Etapa2[/b:403719b30b]
(Quantidade Total de Registros / Registros Processados) / Resultado da Conta 1

Este cálculo irá te retornar o tempo em segundos (se eu não estou enganado). Aí você divide por 60 e tem o tempo em minutos.

No caso de Cópia de Arquivo, substituir ´Quantidade Total de Registros´ por ´Tamanho do Arquivo´ e ´Registros Processados´ por ´Tamanho Copiado´ e por aí vai...


GOSTEI 0
Juniorvieira

Juniorvieira

15/10/2008

Um cálculo que um amigo meu me passou há tempos atrás para calcular o processamento médio de um fetch (While) é o seguinte: [b:2348afdfed]Etapa1[/b:2348afdfed]
(Horário de Inicio x Registros Processados) / Quantidade Total de Registros
[b:2348afdfed]Etapa2[/b:2348afdfed]
(Quantidade Total de Registros / Registros Processados) / Resultado da Conta 1
Este cálculo irá te retornar o tempo em segundos (se eu não estou enganado). Aí você divide por 60 e tem o tempo em minutos. No caso de Cópia de Arquivo, substituir ´Quantidade Total de Registros´ por ´Tamanho do Arquivo´ e ´Registros Processados´ por ´Tamanho Copiado´ e por aí vai...


:arrow: Obrigado, Marcos Rocha. Legal o que vc postou. eu achava que tinha um jeito de estipular o processo pelo tempo que ele dura no processador. ou algo do genero. Pq os processos sofrem I/O e prempção logo daria pra calcular até que parte do processo já ocorreu. Mas é meio viajem né ??? heheheh As vezes eu faço uns desafios pra mim desse tipo hehe vou acabar adoecendo kkkkk


GOSTEI 0
Marcosrocha

Marcosrocha

15/10/2008

Junior, eu estive estudando este código porque pra ser sincero na época eu desisti de testar porque estava sem tempo. Na verdade eu rodei um While aqui e o cálculo parece estar errado. Ele está mostrando os segundos do relógio do PC. Mas a lógica é essa mesmo:
Pegar a Hora+Minuto+Segundos do Início do Processo e comparar a Quantidade Total com a Quantidade de Registros Processados.
E uma correção, na etapa 2 é:
(Quantidade Total de Registros / Registros Processados) * Resultado da Conta 1

Mas como disse, parece que não deu certo o cálculo. Caso eu encontre algo a respeito, eu volto a postar.


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

15/10/2008

tente algo assim:
horainicio := datetime;
total := totaldebytes; // ou de registros, ou de qualquer outra coisa
saldo := total;
processado := 0;
tempoestimado := 0;
tempodecorrido := 0;

while processado < total do
begin
  // a variável processado precisa acumular o que está sendo processado
  processado := processado + soma_o_total_executado;

  saldo := saldo - processado;
  
  tempodecorrido := secondsbetween(now, horainicio);
  tempoestimado := saldo * (processado / tempodecorrido);

  labelx.caption := formatfloat(´,#0.00 segundos´, tempoestimado);
  application.processmesages;
end;



GOSTEI 0
Juniorvieira

Juniorvieira

15/10/2008

Maravilha bem legal, valeu pela ajuda rapaziada.. a parada fica bem matematica mesmo... :lol:


GOSTEI 0
Facc

Facc

15/10/2008

Posso usar o mesmo conceito pra mostrar o progresso de um envio de email pelo meu programa?

D2006 e Indy9


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

15/10/2008

pode sim, Facc. porém, se seu problema for somente o progresso da barra, o indy já te dá condições de preenchê-lo corretamente através dos seus eventos. o problema aqui é estimar o tempo para término do processo.


GOSTEI 0
Facc

Facc

15/10/2008

Qual evento? Tentei ver em todos, mas não achei.

Certa vez achei aqui no forum que pegava o tamanho do email a ser enviado, mas não consegui implementar.


GOSTEI 0
POSTAR