CreateThread en C#: Creación y Manejo de Hilos
El uso de hilos es fundamental en la programación de sistemas y aplicaciones que requieren realizar múltiples tareas simultáneamente. La función CreateThread
de kernel32.dll es una herramienta poderosa para crear hilos en aplicaciones de Windows. En este ejemplo, vamos a ver cómo podemos usar esta función en C# para crear un hilo y ejecutar código concurrentemente.
Descripción de CreateThread
CreateThread
La función CreateThread
se utiliza para crear un nuevo hilo en un programa. Su sintaxis en C (o C# mediante P/Invoke) es la siguiente:
Argumentos:
lpThreadAttributes
: Especifica un puntero a una estructura que define los atributos del hilo. Usualmente se pasaIntPtr.Zero
para usar los valores predeterminados.dwStackSize
: Es el tamaño de la pila para el nuevo hilo. Si se pasa 0, se utilizará el tamaño predeterminado.lpStartAddress
: Especifica la dirección de la función que será ejecutada por el hilo.lpParameter
: Puntero a los parámetros que se pasan a la función del hilo. Si no hay parámetros, se pasaIntPtr.Zero
.dwCreationFlags
: Especifica los flags de creación del hilo (0 para crear un hilo en ejecución).lpThreadId
: Devuelve el identificador del hilo creado.
Retorno:
Devuelve un handle para el hilo creado. Si la función falla, devuelve
IntPtr.Zero
.
Uso de CreateThread
en C#
CreateThread
en C#En C#, podemos utilizar P/Invoke para invocar funciones de la API nativa de Windows, como CreateThread
. A continuación, mostramos un ejemplo práctico en el que se crea un hilo utilizando CreateThread
y se ejecuta un método en ese hilo.
Código en C#:
Explicación del Código:
Declaración del Delegado
ThreadProcDelegate
:Primero definimos un delegado (
ThreadProcDelegate
) que representa el tipo de método que se ejecutará en el hilo. Este delegado debe tener la misma firma que la función que se ejecutará en el hilo, en este caso,MiMetodo
.
Importación de
CreateThread
:Usamos P/Invoke para importar la función
CreateThread
desde la bibliotecakernel32.dll
. Esto nos permite llamar a esta función nativa de Windows directamente desde C#.
Creación del Hilo:
Llamamos a
CreateThread
pasando los parámetros adecuados:IntPtr.Zero
se pasa para usar los valores predeterminados en los atributos del hilo y la pila.El delegado
MiMetodo
es el que se ejecutará en el hilo.IntPtr.Zero
se pasa porque no necesitamos parámetros adicionales para el hilo.0
para losdwCreationFlags
, lo que significa que el hilo se ejecutará inmediatamente.
Ejecución Concurrente:
El método
MiMetodo
se ejecuta en el hilo creado porCreateThread
. Este método imprime los números del 0 al 4 con un retardo de un segundo entre cada impresión gracias aThread.Sleep(1000)
.
Esperar la Entrada del Usuario:
Dado que
CreateThread
crea el hilo en segundo plano, la ejecución del hilo no detiene el flujo principal del programa. Por lo tanto, utilizamosConsole.ReadKey()
para hacer una pausa y permitir que el usuario vea la salida del hilo antes de que la aplicación termine.
Last updated