Advertisement
Fhernd

EjecucionThreadEnCore.cs

Jul 10th, 2014
1,558
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.32 KB | None | 0 0
  1. using System;
  2. using System.Diagnostics;
  3. using System.Threading;
  4.  
  5. namespace Recetas.Multithreading.Cap01.R0106
  6. {
  7.     public class ManejadorThread
  8.     {
  9.         private bool detenido = false;
  10.        
  11.         public void Detener()
  12.         {
  13.             detenido = true;
  14.         }
  15.    
  16.         public void ContarNumeros()
  17.         {
  18.             long contador = 0;
  19.            
  20.             while (!detenido)
  21.             {
  22.                 ++contador;
  23.             }
  24.            
  25.             Console.WriteLine ("\nEl thread `{0}` con prioridad {1,11} tiene un contador de {2,13}.",
  26.                 Thread.CurrentThread.Name,
  27.                 Thread.CurrentThread.Priority.ToString(),
  28.                 contador.ToString ("N0")
  29.             );
  30.         }
  31.     }
  32.    
  33.     public sealed class EjecucionThreadEnCore
  34.     {
  35.         public static void EjecutarThreads ()
  36.         {
  37.             ManejadorThread mt = new ManejadorThread();
  38.            
  39.             // Crea dos instancias de Thread y les
  40.             // asigna un nombre identificativo:
  41.             Thread t1 = new Thread (mt.ContarNumeros);
  42.             t1.Name = "Thread no. 1";
  43.             Thread t2 = new Thread (mt.ContarNumeros);
  44.             t2.Name = "Thread no. 2";
  45.            
  46.             // Establece el nivel de prioridad:
  47.             t1.Priority = ThreadPriority.Highest;
  48.             t2.Priority = ThreadPriority.Lowest;
  49.            
  50.             // Inicio de la ejecución de los threads:
  51.             t1.Start ();
  52.             t2.Start ();
  53.            
  54.             // Detiene el Thread actual por 2 segundos:
  55.             Thread.Sleep (TimeSpan.FromSeconds (2));
  56.             mt.Detener();
  57.         }
  58.        
  59.         public static void Main()
  60.         {
  61.             Console.WriteLine ("\nPrioridad del thread Main: {0}",
  62.                 Thread.CurrentThread.Priority
  63.             );
  64.            
  65.             Console.WriteLine ("Ejecución sobre todos los núcleos (cores) disponibles...");
  66.             EjecutarThreads();
  67.            
  68.             // Detiene al thread Main por 2 segundos:
  69.             Thread.Sleep (TimeSpan.FromSeconds (3));
  70.             Console.WriteLine ("\nEjecución sobre un único núcleo (core)...");
  71.             Process.GetCurrentProcess().ProcessorAffinity = new IntPtr (1);
  72.             EjecutarThreads();
  73.         }
  74.     }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement