Un bucle de ejecución es efectivamente:
while(... get an event ...)
... handle event ...;
Se ejecuta en un hilo; el hilo principal tiene el bucle de evento principal donde se procesan los eventos del usuario y se produce la mayoría de los dibujos UI, etc. El documentation explains it in detail.
Sin embargo, en su caso, no necesita un hilo.
Parece que todo lo que hace es actualizar periódicamente una etiqueta en la interfaz de usuario; algo que no es terriblemente computacional.
Simplemente programe su temporizador en el hilo principal y termine con él. No es necesario hacer girar un hilo, usando performSelectorOnMainThread:
, ni incurrir en todas las complejidades para garantizar la coherencia de los datos entre los hilos.
Lo siento, no entendí su pregunta.
Internamente, un ciclo de ejecución funciona básicamente colocando un indicador en el ciclo de ejecución que dice "después de que transcurra este tiempo, active el temporizador". No hay hilos adicionales involucrados y, mejor aún, no es una encuesta para verificar la hora. Piense en un ciclo de ejecución como el mantenimiento efectivo de una línea de tiempo. Dejará transcurrir pasivamente el tiempo hasta que se encuentre algo de interés en la línea de tiempo (todo sin sondeo).
Significa, sin embargo, que un temporizador nunca será 100% preciso . Además, si tienes un temporizador repitiendo cada segundo, va a la deriva con el tiempo.
También; en lugar de desencadenar directamente un evento de dibujo. Su temporizador debe invalidar la vista que necesita actualización, luego deje que los objetos subyacentes se ocupen cuando sea mejor actualizar la pantalla.
El temporizador no será 100% exacto, pero no se desplazará con el tiempo. El documento dice "Un temporizador repetitivo se reprograma automáticamente en función del tiempo de encendido programado, no del tiempo real de encendido. Por ejemplo, si un temporizador está programado para disparar a una hora determinada y cada 5 segundos después, el tiempo de encendido programado siempre caerá los intervalos de tiempo originales de 5 segundos, incluso si el tiempo real de encendido se retrasa – CarmeloS
Ese es un nuevo comportamiento. Solían derivar con el tiempo. – bbum
Creo que debería poner la versión del sistema a partir de la cual cambió el comportamiento aquí para que otros, incluido yo , puede usar temporizadores correctamente. ¿Te importaría? – CarmeloS