Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   milisegundos no pasan rapido (https://www.clubdelphi.com/foros/showthread.php?t=92979)

danielmj 07-04-2018 14:52:31

milisegundos no pasan rapido
 
Pongo esto aqui por que es parte de la misma aplicacion, por no abrir un hilo nuevo.
Tengo este codigo en un timer:


Código:

Hour, Min, Sec y MSec está declarados de tipo word
Código Delphi [-]
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  inc(MSec);
  If MSec = 100 then begin
     Sec := Sec + 1;
     MSec := 0;
  end;
  If Sec = 60 then begin
     Min := Min + 1;
     Sec := 0;
  end;
  If Min = 60 then begin
     Hour := Hour + 1;
     Min  := 0;
  end;
  Present := EncodeTime(Hour, Min, Sec, MSec);
  //stB.Panels.Items[4].Text:=TimetoStr(Present)+':'+inttostr(MSec);
  Label11.Caption := TimetoStr(Present)+':'+inttostr(MSec);

Y aunque funciona, tengo el problema de que los milisegundos no pasan rapido, más bien parecen segundos (ver tiempo en color rojo en el video) y es que el mismo codigo lo tengo en la version de delphi (es copiar y pegar) y si funciona correctamente. Alguna idea? Gracias.

https://drive.google.com/open?id=1ne...V4zJJhX_vwiCKB

Casimiro Notevi 07-04-2018 20:54:21

Cita:

Empezado por danielmj (Mensaje 525512)
por no abrir un hilo nuevo.

Es que tienes que abrir otro hilo, no tiene absolutamente nada que ver con lo otro.
Saludos.

mamcx 08-04-2018 03:15:38

Cita:

Empezado por danielmj (Mensaje 525512)
Y aunque funciona, tengo el problema de que los milisegundos no pasan rapido, más bien parecen segundos (ver tiempo en color rojo en el video) y es que el mismo codigo lo tengo en la version de delphi (es copiar y pegar) y si funciona correctamente. Alguna idea? Gracias.

Mi intuicion me dice que eso pasa porque no solo windows y linux tienes ligeras diferencias en sus librerias, sino que ademas porque los milisegundos no pasan rapido precisamente porque los milisegundos PASAN rapido.

Estas haciendo calculos manuales bajo la suposicion de que ese paso NO TOMA TIEMPO.

Cada invocacion al evento TOMA TIEMPO (osea, para cuando llegas al evento estas tomando el tiempo en EL PASADO). Eso significa que se debe ir distorcionando mientras mas tiempo pasa. Estas teniendo 2 relojes que se ve van a descordinar.

Y ademas, ASI NO ES COMO SE HACE ESTO.

Si quieres hacer calculos correcto, debes invocar las APIs adecuadas para el caso y usar las que invocan relojes de ALTA precision. Luego hacer la diferencia.

Osea, es lo mismo que se hace para hacer un "timing function":

https://www.thoughtco.com/accurately...d-time-1058453

danielmj 09-04-2018 20:17:13

Hola mamcx

Pues debo discrepar, ese mismo código funciona perfectamente en la version windows de mi mismo programa, así que no sé... Gracias.

mamcx 09-04-2018 21:53:18

Y al pasarlo a otra plataforma no funciona. Porque no esta correcto sino que depende de que tuviste suerte :)


La franja horaria es GMT +2. Ahora son las 09:48:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi