Advertisement
Fhernd

UsoTimerCallbackTimer.cs

Sep 17th, 2014
987
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.78 KB | None | 0 0
  1. using System;
  2. using System.Threading;
  3.  
  4. namespace Recetas.Cap04
  5. {
  6.     // Clase que verifica el estado de variables:
  7.     internal class VerificadorEstado
  8.     {
  9.         private int contador;
  10.         private int maximo;
  11.        
  12.         public VerificadorEstado (int maximo)
  13.         {
  14.             this.maximo = maximo;
  15.             contador = 0;
  16.         }
  17.        
  18.         // Este método será invocado indirectamente
  19.         // por un delagdo TimerCallback:
  20.         public void ComprobarEstado (Object infoEstado)
  21.         {
  22.             AutoResetEvent autoEvent = (AutoResetEvent) infoEstado;
  23.            
  24.             Console.WriteLine ("Estado: {0} - Comprobación a las {1,2}.", (++contador).ToString(), DateTime.Now.ToString("h:mm:ss.fff"));
  25.            
  26.             // Si el contador alcanzó el límite establecido por `maximo`, entonces
  27.             // se reinicia el contador, y genera señal de completado a los
  28.             // threads que se hayan en espera y para que puedan proceder:
  29.             if (contador == maximo)
  30.             {
  31.                 contador = 0;
  32.                 autoEvent.Set();
  33.             }
  34.         }
  35.     }
  36.    
  37.     // Clase con código cliente:
  38.     internal sealed class UsoTimerCallbackTimer
  39.     {
  40.         public static void Main()
  41.         {
  42.             // Controlador de espera:
  43.             // Con false se indica que no debe notificarse una vez se inicialice:
  44.             AutoResetEvent autoEvent = new AutoResetEvent(false);
  45.            
  46.             // Instancia de VerificadorEstado:
  47.             VerificadorEstado ve = new VerificadorEstado(10);
  48.            
  49.             // Encapsula método ComprobarEstado de la instancia ve (VerificadorEstado):
  50.             TimerCallback tcb = new TimerCallback (ve.ComprobarEstado);
  51.            
  52.             // Creación de instancia Timer que señala al delegado (tcb) invocar
  53.             // el método ComprobarEstado después de un segundo, y cada 0.25 segundos:
  54.             Console.WriteLine ("\nCreación de temporizador (Timer) a las {0}.\n", DateTime.Now.ToString("h:mm:ss.fff"));
  55.             Timer temporizador = new Timer (tcb, autoEvent, 1000, 250);
  56.            
  57.             // Cuando se genere una señal por parte de AutoResetEvent, se cambia el
  58.             // periodo de ejecución a medio segundo:
  59.             autoEvent.WaitOne (5000, false);
  60.             temporizador.Change (0, 500);
  61.             Console.WriteLine ("\nCambiando intervalo de ejecución a 1/2 segundo\n");
  62.            
  63.             // Cuando se general una señal por parte de AutoResetEvent, se
  64.             // cancela el temporizador con el método Dispose:
  65.             autoEvent.WaitOne (5000, false);
  66.             temporizador.Dispose();
  67.             Console.WriteLine ("\nSe ha cancelado el temporizador.\n");
  68.         }
  69.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement