Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading;
- namespace Recetas.Cap04
- {
- internal sealed class ManejadorSenializacion
- {
- public static void Main()
- {
- // Crea manejador del mecanismo de señalización:
- AutoResetEvent are = new AutoResetEvent (false);
- // Crea mensaje a pasar al método ManejadorEventos
- // cuando este se ejecute:
- string info = "AutoResetEvent generó una señal.";
- // Registro del método ManejadorEventos a espera o
- // una vez que AutoResetEvent emita una señal. El ciclo
- // de tiempo es de 10 segundos. La operación de espera
- // se realizará indefinidamente (false):
- RegisteredWaitHandle manejador = ThreadPool.RegisterWaitForSingleObject (
- are,
- new WaitOrTimerCallback (ManejadorEventos),
- info,
- 10000,
- false
- );
- Console.WriteLine ("Presione Enter para activar la señal de AutoResetEvent" +
- "\no ingrese \"Cancelar\" para des-registrar la operación de espera.");
- while ( Console.ReadLine ().ToUpper() != "CANCELAR")
- {
- // Mientras que el usuario no decida ingresar "Cancelar"
- // se activará una señal sobre AutoResetEvent; esto
- // hará que el método ManejadorEventos se ejecute; además,
- // de reestablecer para una próxima ejecución:
- are.Set();
- }
- // Des-registra el manejador de señalización:
- Console.WriteLine ("\n\nRemoviendo el manejador de señalización...");
- manejador.Unregister (null);
- Console.WriteLine ("\nEl método Main ha finalizado. Presione Enter para finalizar.");
- Console.ReadLine ();
- }
- // Método que será ejecutado cada vez que una
- // instancia de AutoResetEvent genere una señal o
- // una cantidad de tiempo haya transcurrido:
- private static void ManejadorEventos (object info, bool tiempoAgotado)
- {
- // El mensaje a mostrar depende si el objeto AutoResetEvent ha
- // generado una señal o el tiempo especificado se ha agotado:
- if (tiempoAgotado)
- {
- Console.WriteLine ("El tiempo se agotó a las {0}.",
- DateTime.Now.ToString ("HH:mm:ss:ffff"));
- }
- else
- {
- Console.WriteLine ("Estado `{1}` a las {0}.",
- DateTime.Now.ToString ("HH:mm:ss:ffff"), info);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement