Mostrando las entradas con la etiqueta Thread. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Thread. Mostrar todas las entradas

20 agosto, 2007

Thread con argumentos

En un artículo anterior les compartía un ejemplo de cómo trabajar con aplicaciones multi-hilo, pero para la ejecución de métodos sin argumentos, ahora quiero darles un ejemplo de cómo, con algunas pequeñas variaciones, podemos compartir información entre hilos.

Esto lo hacemos gracias a al método ParameterizedThreadStart el cual permite pasar un argumento de tipo object mediante el método start del thread, pero es mejor si vemos el ejemplo:



Imports System.threading

Module Module1

    Sub DespliegaMensaje(ByVal _texto As Object)
        For i As Integer = 1 To 5
            Console.WriteLine("Mensaje {0}, generado por el hilo: {1}", _texto.ToString, Thread.CurrentThread.ManagedThreadId)
        Next
    End Sub

    Sub Main()
        Dim metodo_a_ejecutar As New ParameterizedThreadStart(AddressOf DespliegaMensaje)
        Dim hilos(5) As Thread
        For i As Integer = 1 To 5
            hilos(i) = New Thread(metodo_a_ejecutar)
            hilos(i).Start("Hilo N°:" + i.ToString)
            If i = 5 Then hilos(i).Priority = ThreadPriority.Highest
        Next
        Console.ReadKey()
        For i As Integer = 1 To 5
            hilos(i).Abort()
        Next
    End Sub

End Module


No he mencionado nada sobre el hilo.abort(), aunque si lo he usado en los ejemplos, este método es utilizado para terminar la ejecución del hilo.


En el siguiente enlace se puede encontrar más información sobre System.Threading

http://msdn.microsoft.com/es-es/library/system.threading(VS.80).aspx

21 julio, 2007

Threading

Todo desarrollador que se preocupe por el rendimiento de las aplicaciones que implementa debe conocer sobre el desarrollo con múltiples hijos (threads). El namespace system.threading contiene lo necesario para crear y administrar el multi-hilo de una aplicación.

Para crear un thread es necesario seguir los siguientes pasos:

  • Crear un método sin argumentos y que no retorne datos.
  • Crear un ThreadStart delegate que haga referencia al método creado en el paso anterior
  • Crear un objeto Thread que haga referencia al ThreadStart delegate anterior.
  • Invocar al thread.start para iniciar la ejecución del nuevo hilo.

Veamos un ejemplo de cómo crear un thread que despliega una línea de texto en la consola.

Imports System.threading

Module Module1

Sub DespliegaMensaje()

Console.WriteLine("Mensaje, generado por el hilo: {0}", Thread.CurrentThread.ManagedThreadId)

End Sub

Sub Main()

Dim metodo_a_ejecutar As New ThreadStart(AddressOf DespliegaMensaje)

Dim NuevoHilo As New Thread(metodo_a_ejecutar)

NuevoHilo.Start()

Console.ReadKey()

NuevoHilo.Abort()

End Sub

End Module

Ahora veamos un ejemplo con varios threads

Imports System.threading

Module Module1

Sub DespliegaMensaje()

For i As Integer = 1 To 5

Console.WriteLine("Mensaje, generado por el hilo: {0}", Thread.CurrentThread.ManagedThreadId)

Next

End Sub

Sub Main()

Dim metodo_a_ejecutar As New ThreadStart(AddressOf DespliegaMensaje)

Dim hilos(5) As Thread

For i As Integer = 1 To 5

hilos(i) = New Thread(metodo_a_ejecutar)

hilos(i).Start()

Next

Console.ReadKey()

For i As Integer = 1 To 5

hilos(i).Abort()

Next

End Sub

End Module

En algunas ocasiones es necesario esperar que alguno de los hilos finalice para proseguir con la ejecución de nuestro código, para esto utilizamos el método join:

Hilo.Join()

También podemos controlar la prioridad de cada hilo, esto lo hacemos con el método priority utilizando el enumerado ThreadPriority.

Highest

La más alta prioridad

AboveNormal

Alta prioridad

Normal

Prioridad normal

BelowNormal

Prioridad baja

Lowest

La más baja prioridad