Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Skeletron

#511
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
#512
Descargando... vamos a ver que dice..
Capaz no me vuelva a pasar por aqui por unos dias, por cuestiones de vacaciones.. pero volveré :D
#513
Creo otro post aqui debajo, por si Sebas y demas gente ya pasaron, y no verán el post en "no leidos desde la ultima visita"


Una cagada... todo mal.. tengo que Sincronizar el metodo... y si o si el metodo entero.. porque.. miren.. ise la siguiente prueba:



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

Public Class Picdex

    Dim _w1 As New WebClient
    Dim _w2 As New WebClient

    Private Sub Picdex_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AddHandler _w1.DownloadStringCompleted, AddressOf Trabajar
        AddHandler _w2.DownloadStringCompleted, AddressOf Trabajar
    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/index.html"))
    End Sub

    Private Sub Trabajar(ByVal sender As Object, ByVal e As DownloadStringCompletedEventArgs)
        SyncLock e
            MsgBox("Inicio")
            For pepe As Integer = 1 To 300
                Thread.Sleep(1)
            Next
            MsgBox("Fin")
        End SyncLock
    End Sub

End Class



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???
#514
EDITO:
Ahora que lo pienso bien.. no voy a tener que Sincronizar nada.. si no usaré hilos de ésta manera... :/

EDITO NUEVAMENTE:
Ahora se me armó un quilombo.. uso o no uso?? voy a hacer unas pruebas...

(ésto que viene aqui debajo, lo habia escrito antes)

Che.. y continuando con el tema de optimizacion...
Yo voy a tener 10 "Dim x as webclient"

Los 10 van a ejecutar el mismo metodo de analisis(al terminar la descarga)... tendria que sincronizar el metodo?? Hay algun identificador para sincronizar un metodo entero? (en java se puede)

Siempre me jodió el tema éste de la sincronizacion de un fragmento de codigo (o sea, no un metodo entero), porque no entiendo porque tengo que poner un objeto en la sentencia SyncLock.. o sea.. si yo tengo varias cosas por sincronizar (todo lo que esté dentro de la lineas de codigo), no tengo porque darle un "synclock" a un solo objeto... que se yo.. no entiendo eso..


En este caso tendría que ser así o no?:
Código (vbnet) [Seleccionar]
Imports System.Net

Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

       Dim vCliente As New WebClient

       AddHandler vCliente.DownloadStringCompleted, AddressOf DescargaCompleta

       Dim vPagina As New Uri("http://www.brodasoft.com.ar/Standart/index.html")

       vCliente.DownloadStringAsync(vPagina)
   End Sub

   Public Shared Sub DescargaCompleta(ByVal sender As Object, ByVal e As DownloadStringCompletedEventArgs)
       Synclock e
       If e.Cancelled = False AndAlso e.Error Is Nothing Then
           Dim vCodigoFuente As String = CStr(e.Result)
           MessageBox.Show("Descarga Completa")
           MessageBox.Show(vCodigoFuente)
       End If
       End Synclock

   End Sub
End Class
#515
Genal Sebas.. te lo agradezco una y mil veces..
lo del progreso no será suficiente.. total será en un segundo. muchas gracias!!!
#516
Yo no dije bajar al disco.. Cualquier recurso que pase de internet a una PC, e una BAJADA... se baja a la ram..  :)

O sea.. a una variable..

Dim w1 As New WebClient
Dim U As New Uri("http://www.brodasoft.com.ar/Standart/index.html")
w1.DownloadStringAsync(U)



Como creo un metodo con el handles del "downloadstringcomplete"????
Y en cuanto a lo de expresiones regulares, será algo así lo que tu dices: http://www.elguille.info/regexp/regExp01.aspx ... creo que eso me sará basta para poder encontrar las imagenes dentro de los codigos html :D

Ahora el problema esta en como crear el metodo que controle el evento que se terminó de "bajar" el html al webclient :/
#517
Alguno de todos ustedes sabe utilizar éstos metodos:
http://msdn.microsoft.com/es-es/library/system.net.webclient.downloadstringcompleted%28VS.80%29.aspx
http://msdn.microsoft.com/es-es/library/system.net.webclient.ondownloadstringcompleted%28VS.80%29.aspx

Se supone que son los que me avisarán cuando se termine de descargar el codigo en el webclient...
#518
Hola gente..
Les comento que estoy (aun no lo hice) por hacer una aplicacion que tendría que funcionar como BOT INDEXADOR de una web.

La cuestion es que, con vb.net, tengo que descargar el codigo fuente de una web, analizar las etiquetas <img ...> y tomar el link de la imagen.

La cuestion, es que necesito que el programa sea lo mas rapido posible.. y como sabran, el problema principal en velocidad, estará en la velocidad de descarga del archivo...
Tengo una conexión de 1MB solamente, y si descargo un archivo con la aplicacion, estoy toltamente seguro que no utilizaré el 100% del ancho de banda.. entonces se me dió la idea de que tal vez podria mejorar eso, si tengo en todo momento descargando archivos...

Mi idea era crear unos cuantos hilos, supongamos 10.

La idea, es que con un webclient, descargo archivos de manera asincronica, y cuando se termine de descargar el codigo fuente (creo que hay un evento para ello), ejecuto un hilo que lo analiza, y al terminar de analizarlo, o sea, al final del hilo, hago que esa mismo webclient, comience con la descarga del proximo archivo, y repetir ésto..

O sea.. a ver si me explico:
Al darle al boton COMENZAR, se comenzaran a descargar en 10 webclients las webs, y al terminar una, se ejecuta un hilo (thread) y analiza ese codigo, y al terminar de realizar ese analisis, coloca de nuevo a descargar otro archivo al webclient que llamó a éste hilo..

Preguntas:
Ustedes creen que de esa manera ocuparé mejor el tiempo de descarga?
Alguien tiene alguna idea mejor?
Alguien conoce algun metodo rapido, o alguna funcion de .net para analizar etiquetas html en un codigo fuente?
#519
Sabes.. lo voy a hacer en VB.NET... para tener mejor manejo de las etiquetas HTML.. No he probado con php, pero debe ser un quilombo..

La idea es hacer un programa en VB.NET que acceda a una web RAIZ, se meta por todos sus links, y busque imagenes en ella.. descargue las imagenes, le haga un tratamiento, y guarde sus datos en una base de datos.
#520
no se puede hacer un "header" (redireccion) enviando datos de la cabecera HTTP?