elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Delegados en hilos... algo raro
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Delegados en hilos... algo raro  (Leído 10,627 veces)
Zzombi

Desconectado Desconectado

Mensajes: 174



Ver Perfil WWW
Delegados en hilos... algo raro
« en: 18 Noviembre 2009, 02:57 am »

hola a todos.

he estado practicando con los delagados en los hilos y la verdad es que me da la sencación de que es màs lento trabajar con delegados.... hice un simple hilo con delegados que llenaba un listBox y luego otro hilo sin delegados (lo cual es màs peligroso) y fue màs ràpido que el con delegados....

estoy ocupando mal los delegados o efectivamente es màs lento?

saludos


En línea

MANULOMM


Desconectado Desconectado

Mensajes: 559


Erepublik.com


Ver Perfil
Re: Delegados en hilos... algo raro
« Respuesta #1 en: 18 Noviembre 2009, 13:15 pm »

los delegados en los hilos son realmente necesarios pues son los que te perimiten la sincronizacion entre hilos, la tarea que haces debe llevar delegados pues tomas los datos en el hilo1 y debes recrearlos en el hilo principal (Interfaz Grafica), para esto requieres un delegado, en cuanto a como estas implementando los mismos pues hasta no ver un trozo de codigo no podria asegurarte nada, pon los dos metodos que utilizas y podremos ayudarte.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia


En línea


Zzombi

Desconectado Desconectado

Mensajes: 174



Ver Perfil WWW
Re: Delegados en hilos... algo raro
« Respuesta #2 en: 18 Noviembre 2009, 19:01 pm »

mira este código con delegados

Código
  1. Imports System.Threading
  2.  
  3. Public Class Form1
  4.    Inherits Form
  5.    Dim t As New Thread(AddressOf hilo)
  6.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  7.        t.Start()
  8.    End Sub
  9.  
  10.    Private Sub hilo()
  11.        addList()
  12.    End Sub
  13.  
  14.    Delegate Sub delegado()
  15.  
  16.    Private Sub addList()
  17.        If ListBox1.InvokeRequired Then
  18.            Dim d As New delegado(AddressOf addList)
  19.            Me.Invoke(d)
  20.        Else
  21.            Dim c As Integer = 0
  22.  
  23.            For c = 0 To 10000
  24.                ListBox1.Items.Add("valor" & c)
  25.                t.Sleep(2000)
  26.            Next
  27.        End If
  28.    End Sub
  29.  
  30.       Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
  31.  
  32.    End Sub
  33. End Class
  34.  

y ete otro sin delegados

Código
  1. Imports System.Threading
  2.  
  3. Public Class Form1
  4.    Inherits Form
  5.    Dim t As New Thread(AddressOf hilo)
  6.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  7.        t.Start()
  8.    End Sub
  9.  
  10.    Private Sub hilo()
  11.        Dim c As Integer = 0
  12.  
  13.        For c = 0 To 10000
  14.            ListBox1.Items.Add("valor" & c)
  15.            t.Sleep(2000)
  16.        Next
  17.    End Sub
  18.  
  19.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  20.        CheckForIllegalCrossThreadCalls = False
  21.    End Sub
  22.  
  23.    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
  24.  
  25.    End Sub
  26. End Class
  27.  

en el segundo código la aplicación me permite trabajar con el textbox mientras se llena el listbox mientras que el primer código con delegados no me deja hacer nada más hasta que termine de llenarse el listbox.... por eso estoy diciendo que con delegados cambia la cosa.

bueno espero que alguien me pueda ayudar

saludos.
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Delegados en hilos... algo raro
« Respuesta #3 en: 18 Noviembre 2009, 22:10 pm »

no se que version del visual studio estaras usando. pero yo usando la 2008, no me deja usar thread.sleep  :laugh:

Bueno, para notar la diferencia implemente un timer que me cuente las milesimas de segundo que cuenta desde presionar el boton, hasta terminar el bucle

La diferencia?...10 a 15 centesimas de segundo  :xD
EDIT: perdon, me equivoque, luego de ver....eran decimasa de segundo XD... asi que el metodo con delegados , tardaba 1,5 segundos, mientras sin el delegado tardaba 1,8 a 1,9 segundos..... sigue sin haber tanta diferencia  ;D

No le veo tanta diferencia. Pero!, creo que tardaria mucho más si es que harias el bucle dentro del trhead y dentro del bucle llames al delegado.

Fuera de eso, alguien pudo usar Thread.Sleep en visual studio 2008? (de cualquier manera, CurrentThread, t.Sleep, etc???)  :huh:
« Última modificación: 18 Noviembre 2009, 22:12 pm por raul338 » En línea

Zzombi

Desconectado Desconectado

Mensajes: 174



Ver Perfil WWW
Re: Delegados en hilos... algo raro
« Respuesta #4 en: 18 Noviembre 2009, 22:26 pm »

no se que version del visual studio estaras usando. pero yo usando la 2008, no me deja usar thread.sleep  :laugh:

Bueno, para notar la diferencia implemente un timer que me cuente las milesimas de segundo que cuenta desde presionar el boton, hasta terminar el bucle

La diferencia?...10 a 15 centesimas de segundo  :xD
EDIT: perdon, me equivoque, luego de ver....eran decimasa de segundo XD... asi que el metodo con delegados , tardaba 1,5 segundos, mientras sin el delegado tardaba 1,8 a 1,9 segundos..... sigue sin haber tanta diferencia  ;D

No le veo tanta diferencia. Pero!, creo que tardaria mucho más si es que harias el bucle dentro del trhead y dentro del bucle llames al delegado.

Fuera de eso, alguien pudo usar Thread.Sleep en visual studio 2008? (de cualquier manera, CurrentThread, t.Sleep, etc???)  :huh:

puntualmente mi problema no tiene que ver con velocidad

si no con esto (cito lo que escribí anteriormente)

"en el segundo código la aplicación me permite trabajar con el textbox mientras se llena el listbox mientras que el primer código con delegados no me deja hacer nada más hasta que termine de llenarse el listbox.... por eso estoy diciendo que con delegados cambia la cosa."
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Delegados en hilos... algo raro
« Respuesta #5 en: 19 Noviembre 2009, 00:30 am »


"en el segundo código la aplicación me permite trabajar con el textbox mientras se llena el listbox mientras que el primer código con delegados no me deja hacer nada más hasta que termine de llenarse el listbox.... por eso estoy diciendo que con delegados cambia la cosa."

nose xq nunca habia visto eso jajaja...... eso me pasa x leer rapido XD

Simple, agrega un "Application.DoEvents()" al final del bucle (dentro del bucle, como ultima instruccion). Opcionalmente deshabilitas el listbox en el llenado si no quieres tener "lag" (a veces pestañea cuando agregas gran cantidad de items)
En línea

Zzombi

Desconectado Desconectado

Mensajes: 174



Ver Perfil WWW
Re: Delegados en hilos... algo raro
« Respuesta #6 en: 19 Noviembre 2009, 01:20 am »

no me funciona... ahora cuando termina el Sleep me muestra lo que escribo en el textbox pero no es igual a colocar CheckForIllegalCrossThreadCalls = False que puedo escribir en el textbox paralelamente mientras se llena el listbox
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Delegados en hilos... algo raro
« Respuesta #7 en: 19 Noviembre 2009, 02:27 am »

por que a nadie le funciona el DoEvents?!?!?! jaja

Lo malo es que no es recomendable usar CheckForIllegalCrossThreadCalls, ... es raro el problema, que version del framework estas programando?
En línea

Zzombi

Desconectado Desconectado

Mensajes: 174



Ver Perfil WWW
Re: Delegados en hilos... algo raro
« Respuesta #8 en: 19 Noviembre 2009, 03:06 am »

el doEvents si me funciono pero no servia para el proposito que quería U.U


estoy ocupando framework 3.5.. y también probe con el 2.0

raul si tienes tiempo libre podrías probar el código para que me entiendas mejor a lo que me refiero..

saludos y gracias por tu tiempo raul
En línea

43H4FH44H45H4CH49H56H45H
Wiki

Desconectado Desconectado

Mensajes: 502



Ver Perfil
Re: Delegados en hilos... algo raro
« Respuesta #9 en: 19 Noviembre 2009, 15:30 pm »

"el primer código con delegados no me deja hacer nada más hasta que termine de llenarse el listbox.... por eso estoy diciendo que con delegados cambia la cosa."

Asi podriamos hacer funcionar tu código:

Código
  1. Imports System
  2. Imports System.ComponentModel
  3. Imports System.Threading
  4. Imports System.Windows.Forms
  5.  
  6. Public Class Form1
  7.    Inherits Form
  8.  
  9.    Delegate Sub delegado(ByVal [text] As String)
  10.    Dim t As New Thread(AddressOf Me.hilo)
  11.  
  12.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  13.        Me.t.Start()
  14.    End Sub
  15.  
  16.    Private Sub hilo()
  17.        Dim c As Integer = 0
  18.        For c = 0 To 10000
  19.            Me.addList("valor" & c)
  20.            Thread.Sleep(500)
  21.        Next
  22.    End Sub
  23.    Private Sub addList(ByVal [text] As String)
  24.        If Me.ListBox1.InvokeRequired Then
  25.            Dim d As New delegado(AddressOf addList)
  26.            Me.Invoke(d, New Object() {[text]})
  27.        Else
  28.            Me.ListBox1.Items.Add([text])
  29.        End If
  30.    End Sub
  31. End Class
  32.  

pero seria mejor que leas en el MSDN como utilizar los delegados y los Thread's porque aunque funciona no es el mejor modo de hacerlo.
En línea


-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Delegados Generales [Aporte]
.NET (C#, VB.NET, ASP)
Keyen Night 0 1,639 Último mensaje 19 Febrero 2012, 22:59 pm
por Keyen Night
Los controles de la class principal no se actualizan con delegados... :-/
.NET (C#, VB.NET, ASP)
Eleкtro 7 3,558 Último mensaje 21 Diciembre 2012, 07:11 am
por Eleкtro
Ayuda con delegados y objetos [C#] « 1 2 »
.NET (C#, VB.NET, ASP)
Vaagish 10 5,764 Último mensaje 24 Mayo 2014, 21:10 pm
por samuelhm
Hilos en python algo que no entiendo
Scripting
eliander20 2 2,904 Último mensaje 21 Mayo 2017, 04:44 am
por tincopasan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines