Hora do Sistema
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??
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??
Night_man
Curtidas 0
Respostas
Thiago Vidal
23/03/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.
diga para que você precisa disto, e talvez eu possa ajudar melhor.
um abraço.
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.
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.
GOSTEI 0
Edilcimar
23/03/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
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
GOSTEI 0
Ipc$
23/03/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.
GOSTEI 0