Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading;
- namespace Recetas.Cap04
- {
- // Clase que verifica el estado de variables:
- internal class VerificadorEstado
- {
- private int contador;
- private int maximo;
- public VerificadorEstado (int maximo)
- {
- this.maximo = maximo;
- contador = 0;
- }
- // Este método será invocado indirectamente
- // por un delagdo TimerCallback:
- public void ComprobarEstado (Object infoEstado)
- {
- AutoResetEvent autoEvent = (AutoResetEvent) infoEstado;
- Console.WriteLine ("Estado: {0} - Comprobación a las {1,2}.", (++contador).ToString(), DateTime.Now.ToString("h:mm:ss.fff"));
- // Si el contador alcanzó el límite establecido por `maximo`, entonces
- // se reinicia el contador, y genera señal de completado a los
- // threads que se hayan en espera y para que puedan proceder:
- if (contador == maximo)
- {
- contador = 0;
- autoEvent.Set();
- }
- }
- }
- // Clase con código cliente:
- internal sealed class UsoTimerCallbackTimer
- {
- public static void Main()
- {
- // Controlador de espera:
- // Con false se indica que no debe notificarse una vez se inicialice:
- AutoResetEvent autoEvent = new AutoResetEvent(false);
- // Instancia de VerificadorEstado:
- VerificadorEstado ve = new VerificadorEstado(10);
- // Encapsula método ComprobarEstado de la instancia ve (VerificadorEstado):
- TimerCallback tcb = new TimerCallback (ve.ComprobarEstado);
- // Creación de instancia Timer que señala al delegado (tcb) invocar
- // el método ComprobarEstado después de un segundo, y cada 0.25 segundos:
- Console.WriteLine ("\nCreación de temporizador (Timer) a las {0}.\n", DateTime.Now.ToString("h:mm:ss.fff"));
- Timer temporizador = new Timer (tcb, autoEvent, 1000, 250);
- // Cuando se genere una señal por parte de AutoResetEvent, se cambia el
- // periodo de ejecución a medio segundo:
- autoEvent.WaitOne (5000, false);
- temporizador.Change (0, 500);
- Console.WriteLine ("\nCambiando intervalo de ejecución a 1/2 segundo\n");
- // Cuando se general una señal por parte de AutoResetEvent, se
- // cancela el temporizador con el método Dispose:
- autoEvent.WaitOne (5000, false);
- temporizador.Dispose();
- Console.WriteLine ("\nSe ha cancelado el temporizador.\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement