none
Problema Con Multihilos RRS feed

  • Pregunta

  • Hola amigos espero y puedan ayudarme estoy diseñando un software un poco pesado y estuve buscando por hay hasta que di una librería de código abierto que permite usar multihilos y sacar el máximo provecho a procesadores multicore pero no se como utilizarla y no tiene documentación el problema radica en que no se que valores enviar en T1 Y T2 dejo aqui el codigo de antemano muchas gracias.

    esta es la descripción que acompaña ala librería.

    MultiThreaded es una biblioteca para desarrolladores .NET que tiene funciones y clases para usar todos los procesadores en un sistema multinúcleo. MultiThreaded es libre de redistribuir en sus propias aplicaciones.
    Caracteristicas
    Contiene clases para procesamiento multinúcleo para funciones que toman uno o dos argumentos

    Public Class MultiThreadedProcesador(Of T1, T2)

        'VECTOR PROCESSING
        Private Shared InputData As T1()
        Private Shared OutputData As T2()
        Private Shared Conversion As Func(Of T1, T2)
        Private Shared DataOn As Integer
        Private Shared SyncObject As New SynchronizationContext
        Private Shared ActiveThreads As Integer
        Private Shared StartCount As Integer
        Private Shared LastStarted As Integer

        Public Shared Function ProcessData(ByVal Input As T1(), ByVal Converter As Func(Of T1, T2), Optional ByVal ThreadPriority As ThreadPriority = ThreadPriority.Normal, Optional ByVal BackgroundProcessing As Boolean = False, Optional ByVal ThreadMultiplier As Integer = 1I) As T2()
            Dim Threads((Environment.ProcessorCount * ThreadMultiplier) - 1I) As Thread
            InputData = Input
            Conversion = Converter
            ReDim OutputData(InputData.Count - 1I)
            DataOn = 0I
            ActiveThreads = 0I
            StartCount = 0I
            LastStarted = 0I
            For StartThread As Integer = 0I To (Environment.ProcessorCount * ThreadMultiplier) - 1I
                LastStarted = StartCount
                Threads(StartThread) = New Thread(AddressOf ProcessThread)
                Threads(StartThread).Priority = ThreadPriority
                Threads(StartThread).IsBackground = BackgroundProcessing
                Threads(StartThread).Start()
                While LastStarted = StartCount
                    NativeAPI.NtDelayExecution(True, -1L)
                End While
            Next
            While ActiveThreads > 0I
                NativeAPI.NtDelayExecution(True, -1L)
            End While
            Return OutputData
        End Function

        Private Shared Sub ProcessThread()
            ActiveThreads += 1I
            StartCount += 1I
            Dim CurrentData As Integer
            Dim InputDataCount As Integer = InputData.Count
            While CurrentData <= InputDataCount - 1I
                SyncLock SyncObject
                    CurrentData = DataOn
                    DataOn += 1I
                End SyncLock
                If CurrentData > InputDataCount - 1I Then
                    ActiveThreads -= 1I
                    Exit Sub
                End If
                OutputData(CurrentData) = Conversion(InputData(CurrentData))
            End While
            ActiveThreads -= 1I
        End Sub

    End Class

    espero y puedan ayudarme a entender como funciona y como utilizarla.

    jueves, 1 de agosto de 2019 8:14

Respuestas

  • concentrate en la clase thread de system.thread creal el procedimiento y luego en el evento que quieres que se efectuen los procedimientos vas enviando cada hilo yo tenia el mismo problema con una aplicacion y asi lo resolvi...

    • Marcado como respuesta Carlo Amador jueves, 1 de agosto de 2019 23:19
    jueves, 1 de agosto de 2019 18:51

Todas las respuestas

  • Hola   Carlo Amador

     

    Dando seguimiento a tu pregunta, te comparto algunos procedimientos que puedes intentar.

     

    • Creamos un proyecto en Visual Studio Class Library en VB.Net
    • En este caso copiamos el código que nos estás compartiendo
    • Compilamos, para verificar que no haya errores. Y guardamos.
    • Abriendo el proyecto que estas desarrollando nos vamos a las propiedades del mismo y damos clic en agregar referencias y buscamos la dll que generamos.

    Con estos pasos podremos ya utilizar la class library que nos estas compartiendo. 

    Espero que te sean de utilidad.

     

    Gracias por usar los foros de MSDN.

     

    Pablo Rubio

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. 

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

     

    jueves, 1 de agosto de 2019 15:42
  • Hola Pablo Rubio

    Muchas gracias, pero mira mi duda está ala hora de enviar  las variables o parámetros necesarios para  utilizarla que son t1 t2 y converter, para el prooceso o función que quiero utilizar en múltiples hilos, por ejemplo

    MultiTreadedProcesador(of t1,t2).ProcessData(t1,converter)

    Mi duda que valores envío en t1 , t2 y converter, ya intenté pasar un form una función pero me da error, y t1 y t2 no dice
    que tipo de variable requiere.



    jueves, 1 de agosto de 2019 16:11
  • concentrate en la clase thread de system.thread creal el procedimiento y luego en el evento que quieres que se efectuen los procedimientos vas enviando cada hilo yo tenia el mismo problema con una aplicacion y asi lo resolvi...

    • Marcado como respuesta Carlo Amador jueves, 1 de agosto de 2019 23:19
    jueves, 1 de agosto de 2019 18:51
  • a muy bien muchas voy a investigar sobre la clase thread
    jueves, 1 de agosto de 2019 23:19
  • por cierto se me olvido en t1 y t2, se colocan los procedimientos que quieren que se ejecuten.
    miércoles, 7 de agosto de 2019 15:11