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.Threading
nombres.
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 funciones). |
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 finalizació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