Array
(
)

Hora do Sistema

Night_man
   - 23 mar 2006

Estou com o problema que eh o seguinte.

Estou tentanto pegar a hora do sistema, mas estou com um problema nos milissegundos, por exemplo se eu fizer o cogio abaixo


for Idx := 1 to 2048 do
Lst_Horas.Items.Add( FormatDateTime(´hh:mm:ss.zzz´, Now));





Vai acontecer o seguinte... a hora vai vir por exemplo 12:12:12.125, e isso se repete varias vezes de repente muda direto para 12:12:12.141 e esse fica por um baita tempo, depois muda para 12:12:12:156; ou seja a diferenca minima e entre 15 e 16 millisegundos.


Alguem sabe como pegar uma diferenca menor q essa??


Thiago Vidal
   - 23 mar 2006

não entendi exatamente o objetivo do código, mas acho que isso acontece, pq o delphi processa o loop várias vezes em um mesmo milisegundo.

e posso estar falando besteira, mas acredito que o salto seja porque o sistema multitarefa do windows, vá fazer outras coisas, e pare o processamento da sua aplicação por volta de 15 ms antes de retornar novamente.

para pegar um intervalo menor, eu utilizo GetTickCount, mas no seu caso, vc poderia usar a constante OneMillisecond da unit DateUtils para incrementar 1 ms.

#Código

uses DateUtils;
...
procedure Mostrar;
var
i: Integer;
dt: TDateTime;
begin
dt := Now;
for i := 1 to 2048 do
ListBox1.Items.Add(FormatDateTime(´hh:nn:ss.zzz´, dt + (i * OneMillisecond)));
end;


diga para que você precisa disto, e talvez eu possa ajudar melhor.

um abraço.


Edilcimar
   - 23 mar 2006

tente dar um refresh dentro do for
for Idx := 1 to 2048 do
begin
Lst_Horas.Items.Add( FormatDateTime(´hh:mm:ss.zzz´, Now));
form.refresh;
end;
assim talvez vc consiga ´segurar´ o intervalo das interações


Ipc$
   - 23 mar 2006

Verifique pela função GetSystemTimeAdjustment o período de tempo que o sistema ajusta o clock em unidades de nanossegundos. A partir daí vc não conseguirá um intervalo de tempo inferior a esse.