Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con timer (https://www.clubdelphi.com/foros/showthread.php?t=72836)

efirvida 15-03-2011 05:44:41

Ayuda con timer
 
bueno son dos preguntas,
1ro
es verdad que esta en milisegundos?? si es asi, porque cuando agrego un timer con el interval=1, y adentro pongo una variable a incrementarse, en un segundo no llega ni remotamente a los 1000 valores, hice la prueba con un minuto y en vez de contar 3600 conto 3830 aproximadamente, estoy usando delphi 2010, ahh cuando pongo el interval en 1000 si cuenta en tiempo vien segundo a segundo, sera el timer, el delphi o yo???
2da
hay alguna forma o algun otro componente con el que pueda ejecutar cosas cada 0.2ms, porque el timer no me deja bajar de 1 ms y me hacen falta tiempos menores

Ñuño Martínez 15-03-2011 12:50:35

Bueno, sí, el tiempo se da en milisegundos, pero en un sistema operativo multitarea o multihilo no existe ninguna garantía de que la interrupción se realice exactamente en ese intervalo. El sistema hará lo posible para que sea así, pero no puede garantizarse. Los únicos sistemas capaces de ello son los sistemas de "tiempo real" o los de "tiempo crítico", y Windows no entra en ninguna de estas categorías.

Respecto a si es posible conseguir interrupciones más pequeñas, sí que es posible, pero teniendo en cuenta la misma limitación. Es más, cuanto menor sea el intervalo de interrupción mayor desviación se producirá. Es decir, que hay menos probabilidades de que se produzca la interrupción exactamente en 0'2ms que en 2ms. Haz una prueba; antes de ejecutar el programa pon en marcha otros programas que gasten microprocesador: por ejemplo pon música, carga un vídeo de YouTube, etc. Comprobarás que los tiempos tienden a ser más erráticos.

En definitiva, no es Delphi ni mucho menos tú: es el sistema operativo y el microprocesador.

duilioisola 15-03-2011 13:59:05

Y para qué quieres tiempos tan reducidos?

Busca información sobre GetTickCount, que creo que te ofrecerá otra opción para manejar tiempos.

Puedes ver tambié QueryPerformanceTimer

Supongo que podrías hacer un :
Código:

TicksPorMilisegundos := CantidadDeTicksPorSegundo / 1000;
CeroPuntoDosMilisegundos := 0.2 * TicksPorMilisegundos;
Start := TickInicio;
while ((CantidadDeTicks - Start) < CeroPuntoDosMilisegundos) do
begin
  //No hacer nada
end;



La franja horaria es GMT +2. Ahora son las 04:16:37.

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