Necesito optimizar una aplicacion!!!

Iniciado por Skeletron, 5 Enero 2010, 02:37 AM

0 Miembros y 1 Visitante están viendo este tema.

raul338

Cita de: Skeletron en  5 Enero 2010, 06:14 AM
Si ejecuto eso, como veran hay un msgbox dentro del Synclock.. pero aparecen los 2 mensajes de "INICIO" seguidos... o sea.. yo tengo que hacer algo para que primero se ejecute todo el metodo, y al terminar el metodo, vuelva a ejecutarse con el 2º webclient que produjo el evento...

Definitivamente tengo que usar hilos???

Pero..... es justamente esa la diferencia entre usar hilos en vez bucles en un solo hilo. O sea, si queres bajar una por una, hacelo en un bucle, si queres hacer "varios" a la vez, usa hilos.

Si queres bajar 10, pero no a la vez, supongamos que 3 a la vez. cuando termine uno empieze el que sigue. Implementa semaforos en los hilos. Aca un ejemplo de un amigo mio:

http://www.xtremecodes.es/downloads.php?cat_id=6 (Nota: Es zona de descarga, descarga el que dice Threads con semaforos y/o tambien Threads)

Skeletron

Descargando... vamos a ver que dice..
Capaz no me vuelva a pasar por aqui por unos dias, por cuestiones de vacaciones.. pero volveré :D

Skeletron

Creo que despues de años, encontre hacer lo que busco :D

Miren lo que tengo:

Código (vbnet) [Seleccionar]
Imports System.Threading
Imports System.Net

Public Class Picdex

#Region "WebClients"
    Dim _w1 As New WebClient
    Dim _w2 As New WebClient

    Dim _hilo1 As Thread = New Thread(AddressOf TrabajoW1)
    Dim _hilo2 As Thread = New Thread(AddressOf TrabajoW2)
#End Region

        Private Sub Picdex_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AddHandler _w1.DownloadStringCompleted, AddressOf _hilo1.Start
        AddHandler _w2.DownloadStringCompleted, AddressOf _hilo2.Start
    End Sub

    Private Sub Comenzar(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        _w1.DownloadStringAsync(New Uri("http://www.brodasoft.com.ar/Standart/index.html"))
        _w2.DownloadStringAsync(New Uri("http://www.brodasoft.com.ar/Standart/VIDay.html"))
    End Sub

#Region "Trabajos de W1"
    Private Sub TrabajoW1()
        MsgBox("TrabajoW1 Listo")
        MsgBox("TrabajoW1 Fin")
    End Sub

    Private Sub TrabajoW2()
        MsgBox("TrabajoW2 Listo")
        MsgBox("TrabajoW2 Fin")
    End Sub

#End Region

End Class


Se supone que este codigo le dará START al hilo correspondiente al webclient...
El problema, obviamente, es que no ahorro codigo.. porque tengo 1 metodo por cada hilo.. pero yo busco multiprocesamiento simetrico y descargas paralelas.. nada mas...

Pensé en hacer algo así yo:
crear los 2 webclients, y ejecutar siempre el mismo metodo creando un hilo por cada evento que se produzco y darle por parametro el webclient que produjo el evento.. pero.. para ésto, tendria que hacer algo así:
AddHandler _w1.DownloadStringCompleted, AddressOf (y aqui crear un hilo nuevo y mandar por parametros (_w1))

Pero.. en el addessOf no se pueden poner parametros.. :/
O sea.. no encuentro manera de ejecutar un hilo al producirce un evento, y que éste hilo tenga por parametros el webclient que se ejecutó.. No encuentro manera de establecer una buena sincronizacion..
Porque si hago:
AddHandler _w1.DownloadStringCompleted, AddressOf METODOX
y METODOX es un metodo que crea un hilo que manda por parametros a _w1..
Si 2 eventos se producen casi en el mismo instante.. no alcanza a crear el hilo el 1º evento que se produjo, porque el 2º es como si lo ELIMINARA.. como si cortara automaticamente el 1º evento antes de terminar su operacion de crear el 1º hilo