Clase de hilo en C#

En C#, un sistema de subprocesos múltiples se basa en la clase Thread, que encapsula la ejecución de subprocesos. Esta clase contiene varios métodos y propiedades que ayudan a administrar y crear subprocesos y esta clase se define en el espacio de System.Threadingnombres.

Características de la clase Thread:

  • La clase Thread se utiliza para crear hilos.
  • Con la ayuda de la clase Thread, puede crear hilos de primer plano y de fondo .
  • La clase Thread le permite establecer la prioridad de un hilo.
  • También le proporciona el estado actual de un hilo.
  • Proporciona la referencia del hilo de ejecución actual.
  • Es una clase sellada, por lo que no se puede heredar.

Constructores

Constructor Descripción
Subproceso (ParameterizedThreadStart) Inicializa una nueva instancia de la clase Thread, especificando un delegado que permite pasar un objeto al subproceso cuando se inicia el subproceso.
Subproceso (ParameterizedThreadStart, Int32) Inicializa una nueva instancia de la clase Thread, especificando un delegado que permite pasar un objeto al subproceso cuando se inicia el subproceso y especificando el tamaño máximo de pila para el subproceso.
Subproceso (Inicio de subproceso) Inicializa una nueva instancia de la clase Thread.
Subproceso (SubprocesoInicio, Int32) Inicializa una nueva instancia de la clase Thread, especificando el tamaño de pila máximo para el hilo.

Ejemplo:

// C# program to illustrate
// ThreadStart constructor
using System;
using System.Threading;
  
public class MXThread {
  
    // Non-static method
    public void mythr()
    {
        for (int J = 0; J < 2; J++) {
  
            Console.WriteLine("My Thread is"+
                         " in progress...!!");
        }
    }
}
  
// Driver Class
public class GFG {
  
    // Main Method
    public static void Main()
    {
        // Creating object of ExThread class
        MXThread obj = new MXThread();
  
        // Creating and initializing thread
        // Using thread class and 
        // ThreadStart constructor
        Thread t = new Thread(new ThreadStart(obj.mythr));
        t.Start();
    }
}

Producción:

My Thread is in progress...!!
My Thread is in progress...!!

Propiedades

Propiedad Descripción
ApartamentoEstado Obtiene o establece el estado del apartamento de este subproceso.
Contexto actual Obtiene el contexto actual en el que se ejecuta el subproceso.
Cultura actual Obtiene o establece la referencia cultural del subproceso actual.
Principal actual Obtiene o establece la entidad de seguridad actual del subproceso (para la seguridad basada en roles).
Subproceso actual Obtiene el subproceso actualmente en ejecución.
Cultura de interfaz de usuario actual Obtiene o establece la referencia cultural actual utilizada por Resource Manager para buscar recursos específicos de la referencia cultural en tiempo de ejecución.
Contexto de ejecución Obtiene un objeto ExecutionContext que contiene información sobre los distintos contextos del subproceso actual.
esta vivo Obtiene un valor que indica el estado de ejecución del subproceso actual.
esfondo Obtiene o establece un valor que indica si un subproceso es o no un subproceso en segundo plano.
IsThreadPoolThread Obtiene un valor que indica si un subproceso pertenece o no al grupo de subprocesos administrado.
ManagedThreadId Obtiene un identificador único para el subproceso administrado actual.
Nombre Obtiene o establece el nombre del subproceso.
Prioridad Obtiene o establece un valor que indica la prioridad de programación de un subproceso.
ThreadState Obtiene un valor que contiene los estados del subproceso actual.

Ejemplo:

// C# program to illustrate how to
// set and get the priority of threads
using System;
using System.Threading;
  
class GFG {
  
    // Main Method
    static public void Main()
    {
  
        // Creating and initializing threads
        Thread THR1 = new Thread(work);
        Thread THR2 = new Thread(work);
        Thread THR3 = new Thread(work);
  
        // Set the priority of threads
        THR2.Priority = ThreadPriority.Lowest;
        THR3.Priority = ThreadPriority.AboveNormal;
        THR1.Start();
        THR2.Start();
        THR3.Start();
  
        // Display the priority of threads
        Console.WriteLine("The priority of Thread 1 is: {0}",
                                              THR1.Priority);
  
        Console.WriteLine("The priority of Thread 2 is: {0}",
                                              THR2.Priority);
  
        Console.WriteLine("The priority of Thread 3 is: {0}",
                                              THR3.Priority);
    }
  
    public static void work()
    {
  
        // Sleep for 1 second
        Thread.Sleep(1000);
    }
}

Producción:

The priority of Thread 1 is: Normal
The priority of Thread 2 is: Lowest
The priority of Thread 3 is: AboveNormal

Métodos

Método Descripción
Abortar() Genera una ThreadAbortException en el subproceso en el que se invoca, para comenzar el proceso de terminación del subproceso. Llamar a este método generalmente termina el hilo.
Asignar ranura de datos() Asigna una ranura de datos sin nombre en todos los subprocesos. Para un mejor rendimiento, utilice campos que estén marcados con el atributo ThreadStaticAttribute en su lugar.
AllocateNamedDataSlot(String) Asigna una ranura de datos con nombre en todos los subprocesos. Para un mejor rendimiento, utilice campos que estén marcados con el atributo ThreadStaticAttribute en su lugar.
BeginCriticalRegion() Notifica a un host que la ejecución está a punto de ingresar a una región de código en la que los efectos de un aborto de subproceso o una excepción no controlada pueden poner en peligro otras tareas en el dominio de la aplicación.
BeginThreadAffinity() Notifica a un host que el código administrado está a punto de ejecutar instrucciones que dependen de la identidad del subproceso del sistema operativo físico actual.
DeshabilitarComObjectEagerCleanup() Desactiva la limpieza automática de contenedores a los que se puede llamar en tiempo de ejecución (RCW) para el subproceso actual.
EndCriticalRegion() Notifica a un host que la ejecución está a punto de ingresar a una región de código en la que los efectos de un aborto de subproceso o una excepción no controlada se limitan a la tarea actual.
EndThreadAffinity() Notifica a un host que el código administrado ha terminado de ejecutar instrucciones que dependen de la identidad del subproceso del sistema operativo físico actual.
Es igual a (Objeto) Determina si el objeto especificado es igual al objeto actual.
Finalizar() Garantiza que los recursos se liberen y se realicen otras operaciones de limpieza cuando el recolector de elementos no utilizados reclama el objeto Thread.
Ranura de datos con nombre libre (string) Elimina la asociación entre un nombre y un slot, para todos los subprocesos del proceso. Para un mejor rendimiento, utilice campos que estén marcados con el atributo ThreadStaticAttribute en su lugar.
ObtenerEstadoApartamento() Devuelve un valor de ApartmentState que indica el estado del apartamento.
ObtenerPilaComprimida() Devuelve un objeto CompressedStack que se puede usar para capturar la pila del subproceso actual.
GetData(LocalDataStoreSlot) Recupera el valor de la ranura especificada en el subproceso actual, dentro del dominio actual del subproceso actual. Para un mejor rendimiento, utilice campos que estén marcados con el atributo ThreadStaticAttribute en su lugar.
ObtenerDominio() Devuelve el dominio actual en el que se ejecuta el subproceso actual.
ObtenerIDDominio() Devuelve un identificador de dominio de aplicación único.
Obtener código hash() Devuelve un código hash para el subproceso actual.
ObtenerRanuraDeDatosConNombre(String) Busca una ranura de datos con nombre. Para un mejor rendimiento, utilice campos que estén marcados con el atributo ThreadStaticAttribute en su lugar.
ObtenerTipo() Obtiene el Tipo de la instancia actual.
Interrumpir() Interrumpe un subproceso que se encuentra en el estado de subproceso WaitSleepJoin.
Unirse() Bloquea el subproceso de llamada hasta que finaliza el subproceso representado por esta instancia, mientras continúa realizando el bombeo estándar de COM y SendMessage.
MemberwiseClone() Crea una copia superficial del objeto actual.
BarreraMemoria() Sincroniza el acceso a la memoria de la siguiente manera: el procesador que ejecuta el subproceso actual no puede reordenar las instrucciones de tal manera que los accesos a la memoria antes de la llamada a MemoryBarrier() se ejecuten después de los accesos a la memoria que siguen a la llamada a MemoryBarrier().
RestablecerCancelar() Cancela un Abort(Object) solicitado para el subproceso actual.
Reanudar() Reanuda un hilo que ha sido suspendido.
Establecer estado del apartamento (estado del apartamento) Establece el estado de apartamento de un subproceso antes de que se inicie.
EstablecerPilaComprimida(PilaComprimida) Aplica un CompressedStack capturado al subproceso actual.
SetData(LocalDataStoreSlot, Objeto) Establece los datos en la ranura especificada en el subproceso que se está ejecutando actualmente, para el dominio actual de ese subproceso. Para un mejor rendimiento, utilice campos marcados con el atributo ThreadStaticAttribute en su lugar.
Dormir() Suspende el subproceso actual durante la cantidad de tiempo especificada.
GirarEsperar(Int32) Hace que un subproceso espere el número de veces definido por el parámetro de iteraciones.
Comienzo() Hace que un subproceso se programe para su ejecución.
Suspender() O suspende el subproceso, o si el subproceso ya está suspendido, no tiene efecto.
Enstringr() Devuelve una string que representa el objeto actual.
TrySetApartmentState(ApartmentState) Establece el estado de apartamento de un subproceso antes de que se inicie.
lecturavolátil() Lee el valor de un campo. El valor es el último escrito por cualquier procesador en una computadora, independientemente de la cantidad de procesadores o el estado de la memoria caché del procesador.
escritura volátil() Escribe un valor en un campo inmediatamente, de modo que el valor sea visible para todos los procesadores de la computadora.
Rendir() Hace que el subproceso de llamada ceda la ejecución a otro subproceso que está listo para ejecutarse en el procesador actual. El sistema operativo selecciona el subproceso al que ceder.

Ejemplo:

// C# program to illustrate the
// concept of Join() method
using System;
using System.Threading;
  
public class MYThread {
  
    // Non-Static method
    public void mythr1()
    {
        Console.WriteLine("1nd thread is Working..!!");
        Thread.Sleep(100);
    }
  
    // Non-Static method
    public void mythr2()
    {
        Console.WriteLine("2nd thread is Working..!!");
    }
}
  
// Driver Class
public class ThreadExample {
  
    // Main method
    public static void Main()
    {
        // Creating instance of MYThread class
        MYThread obj = new MYThread();
  
        // Creating and initializing threads
        Thread T1 = new Thread(new ThreadStart(obj.mythr1));
        Thread T2 = new Thread(new ThreadStart(obj.mythr2));
        T1.Start();
  
        // Join thread
        T1.Join();
        T2.Start();
    }
}

Producción:

1nd thread is Working..!!
2nd thread is Working..!!

Referencia:

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *