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


 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (Moderadores: Novlucker, seba123neo, kub0x, Eleкtro)
| | | |-+  (SOLUCIONADO) Duda sobre los elementos que trabajan en segundo plano
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: (SOLUCIONADO) Duda sobre los elementos que trabajan en segundo plano  (Leído 2,409 veces)
Eleкtro
Moderador
***
Conectado Conectado

Mensajes: 5.985


"El escepticismo es la base de la inteligencia."


Ver Perfil
(SOLUCIONADO) Duda sobre los elementos que trabajan en segundo plano
« en: 17 Diciembre 2012, 09:14 »

Hola,

¿Cuales de estos elementos trabajan en segundo plano al llamarlos, y cuales NO (osea cuales congelan la class)?



Sub
Function
Module
Una class distinta a la actual
(No se me ocurren más elementos que preguntar...)



Por ejemplo un thread , all llamarlo trabaja en segundo plano sin congelar la app, pues a eso me refiero, ¿hay otros elementos que trabajen en segundo plano?

Muchas gracias


« Última modificación: 18 Diciembre 2012, 18:14 por EleKtro H@cker » En línea

Como insertar un código:

 

-> Reglas del foro <-
spiritdead

Desconectado Desconectado

Mensajes: 295


Ver Perfil
Re: Duda sobre los elementos que trabajan en segundo plano
« Respuesta #1 en: 17 Diciembre 2012, 10:50 »

Hola,

¿Cuales de estos elementos trabajan en segundo plano al llamarlos, y cuales NO (osea cuales congelan la class)?



Sub
Function
Module
Una class distinta a la actual
(No se me ocurren más elementos que preguntar...)



Por ejemplo un thread , all llamarlo trabaja en segundo plano sin congelar la app, pues a eso me refiero, ¿hay otros elementos que trabajen en segundo plano?

Muchas gracias
sub es un subrutina por decirle asi donde puedes enviarle parametros
functions son funciones de las cuales envias parametros y casi siempre obtienes un unico resultado
y modulos son espacios donde puedes crear subrutinas-funciones

diciendolo de manera sencilla :P para no irme al tecnicismo

y todo corre tanto en main como segundo plano

cuando hablas de threads estas hablando de hilos

tu aplicacion corre en el hilo principal o llamado Hilo Padre, del cual esta tu appDomain principal, en el cual esta todo lo relacionado a tu programa

al crear hilos, ellos utilizan informacion del appdomain, y generan un hilo HIJO del cual puedes realizar tareas

es bien sabido que al utilizar hilos TU NO puedes acceder al hilo padre desde el, y para ello entra al tema los llamados "DELEGADOS"

y bueno ahi sigue en extenso la larga trama de threads-delegates


« Última modificación: 17 Diciembre 2012, 10:52 por spiritdead » En línea

Facilitador De Tareas - Task Simplifier (FDT)
Eleкtro
Moderador
***
Conectado Conectado

Mensajes: 5.985


"El escepticismo es la base de la inteligencia."


Ver Perfil
Re: Duda sobre los elementos que trabajan en segundo plano
« Respuesta #2 en: 17 Diciembre 2012, 12:20 »

es bien sabido que al utilizar hilos TU NO puedes acceder al hilo padre desde el, y para ello entra al tema los llamados "DELEGADOS"
es bien sabido y bien sufrido :(, pero eso no es del todo cierto, se puede acceder al hilo principal usando Checkforillegalcrossthreadcall = false    (Ya, sé que no es correcto usarlo y da muchos problemas, lo he sufrido mucho :()

Dices que todo corre en main y en segundo plano, pero no entiendo el concepto, si las sub-rutinas corrieran en segundo plano entonces no congelarían el main, ¿no?...

Lo que tengo claro es que un thread corre en segundo plano (osea en un subproceso del proceso principal)

Yo lo que pretendo saber es:
si por ejemplo desde el form principal tengo que llamar a un sub el cual usa un for, que obviamente congelará la app hasta finalizar el for... ¿el único elemento al que puedo recurrir para evitar el congelamiento es crear un nuevo thread (hilo) y llamar a ese thread en lugar del sub?
¿O puedo usar algún otro elemento que trabaje "en segundo plano" como el thread?


Gracias por la explicación.
En línea

Como insertar un código:

 

-> Reglas del foro <-
Novlucker
Ninja y
Moderador Global
***
Desconectado Desconectado

Mensajes: 10.684


Yo que tu lo pienso dos veces


Ver Perfil
Re: Duda sobre los elementos que trabajan en segundo plano
« Respuesta #3 en: 17 Diciembre 2012, 13:06 »

Si, todo eso que mencionas bloquea la app si no son llamados desde otro thread, o desde un BackgroundWorker por ejemplo.

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
http://twitter.com/novlucker

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

kub0x
Moderador
***
Desconectado Desconectado

Mensajes: 735


S3C M4NI4C


Ver Perfil
Re: Duda sobre los elementos que trabajan en segundo plano
« Respuesta #4 en: 17 Diciembre 2012, 13:09 »

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

Si estoy en lo cierto tienes -> BackGroundWorker, ThreadPool, Delegados(métodos asíncronos) ... Como ves no estás obligado a trabajar únicamente con la clase Thread(), existen alternativas y seguramente me olvido de alguna xD. Si el subproceso lo quieres pausar para lanzar otro subproceso dentro de éste, pues con las clases Mutex() o Semaphore() consigues ese resultado.
En línea

No hay amigos, ni enemigos, lucha necia, todos contra todos.

"Music directly represents the passions of the soul. If one listens to the wrong kind of music, he will become the wrong kind of person".

spiritdead

Desconectado Desconectado

Mensajes: 295


Ver Perfil
Re: Duda sobre los elementos que trabajan en segundo plano
« Respuesta #5 en: 18 Diciembre 2012, 00:51 »

es bien sabido y bien sufrido :(, pero eso no es del todo cierto, se puede acceder al hilo principal usando Checkforillegalcrossthreadcall = false    (Ya, sé que no es correcto usarlo y da muchos problemas, lo he sufrido mucho :()

Dices que todo corre en main y en segundo plano, pero no entiendo el concepto, si las sub-rutinas corrieran en segundo plano entonces no congelarían el main, ¿no?...

Lo que tengo claro es que un thread corre en segundo plano (osea en un subproceso del proceso principal)

Yo lo que pretendo saber es:
si por ejemplo desde el form principal tengo que llamar a un sub el cual usa un for, que obviamente congelará la app hasta finalizar el for... ¿el único elemento al que puedo recurrir para evitar el congelamiento es crear un nuevo thread (hilo) y llamar a ese thread en lugar del sub?
¿O puedo usar algún otro elemento que trabaje "en segundo plano" como el thread?


Gracias por la explicación.

usar el  Checkforillegalcrossthreadcall = false es un error muy fuerte

si o si, si usaras threads debes aprender a manejar delegados para acceder a los controles del hilo padre de forma SEGURA :)

xD evitate dolores de cabeza y olvidate del  Checkforillegalcrossthreadcall = false y enfocate en threads

despues q aprendes a usarlos, y dominarlos el mundo lo vez de color de rosa

y si tienes buen dominio podrias hacer 1 buena combinacion de (threads-delegados-eventos-thread.sleep(X)) dando 1 plus a tus aplicaciones en temas de rendimiento

1 muestra es el Filezilla para la subida-descarga el soft usa multi-hilo y nota lo liso q va :)

o como en mi software implemente esa metodologia, y puedo realizar cientos de tareas a la vez con consumos del cpu menores al 5% siempre :)
En línea

Facilitador De Tareas - Task Simplifier (FDT)
Eleкtro
Moderador
***
Conectado Conectado

Mensajes: 5.985


"El escepticismo es la base de la inteligencia."


Ver Perfil
Re: Duda sobre los elementos que trabajan en segundo plano
« Respuesta #6 en: 18 Diciembre 2012, 16:07 »

¿Y que me dicen de esto?
Código
  1.    ' Usage:
  2.    ' InvokeControl(RichTextBox1, Sub(x) x.AppendText("a"))
  3.  
  4. #Region " Invoke Controls "
  5.    Public Sub InvokeControl(Of T As Control)(ByVal Control As T, ByVal Action As Action(Of T))
  6.        If Control.InvokeRequired Then
  7.            Control.Invoke(New Action(Of T, Action(Of T))(AddressOf InvokeControl), New Object() {Control, Action})
  8.        Else
  9.            Action(Control)
  10.        End If
  11.    End Sub
  12. #End Region

Lo he testeado a fondo creando varios threads que modifican propiedades de varios controles al mismo tiempo, e incluso modifican el mismo control del form principal todos los threads al mismo tiempo, y no me ha saltado ninguna excepción, es decir, lo he podido usar sin escribir delegados...

¿Esa técnica la consideran buena o la idea de usar delegados sigue siendo mejor?
En línea

Como insertar un código:

 

-> Reglas del foro <-
Novlucker
Ninja y
Moderador Global
***
Desconectado Desconectado

Mensajes: 10.684


Yo que tu lo pienso dos veces


Ver Perfil
Re: Duda sobre los elementos que trabajan en segundo plano
« Respuesta #7 en: 18 Diciembre 2012, 16:56 »

[...] lo he podido usar sin escribir delegados [...]

No has declarado un delegado, has utilizado uno predefinido, ¿que crees que es Action? :P

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
http://twitter.com/novlucker

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Eleкtro
Moderador
***
Conectado Conectado

Mensajes: 5.985


"El escepticismo es la base de la inteligencia."


Ver Perfil
Re: Duda sobre los elementos que trabajan en segundo plano
« Respuesta #8 en: 18 Diciembre 2012, 17:20 »

No has declarado un delegado, has utilizado uno predefinido, ¿que crees que es Action? :P

Vaya, eso lo explica todo XD,
estuve buscando un buen rato sobre lo que es "Action" porque en todos los snippets relacionados con multi-threading lo veo, pero no encontré nada, si pudieras pasarme algún link... xD

Gracias
En línea

Como insertar un código:

 

-> Reglas del foro <-
Novlucker
Ninja y
Moderador Global
***
Desconectado Desconectado

Mensajes: 10.684


Yo que tu lo pienso dos veces


Ver Perfil
Re: Duda sobre los elementos que trabajan en segundo plano
« Respuesta #9 en: 18 Diciembre 2012, 17:43 »

Action http://msdn.microsoft.com/en-us/library/018hxwa8.aspx
Func http://msdn.microsoft.com/en-us/library/bb549151.aspx

Action es un delegado para funciones de tipo Void (sin retorno), y Func para funciones con retorno :)

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
http://twitter.com/novlucker

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Eleкtro
Moderador
***
Conectado Conectado

Mensajes: 5.985


"El escepticismo es la base de la inteligencia."


Ver Perfil
Re: Duda sobre los elementos que trabajan en segundo plano
« Respuesta #10 en: 18 Diciembre 2012, 18:14 »


Código
  1. 'Declaration
  2. Public Delegate Sub Action(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, In T9, In T10, In T11, In T12, In T13, In T14, In T15, In T16) ( _
  3. arg1 As T1, _
  4. arg2 As T2, _
  5. arg3 As T3, _
  6. arg4 As T4, _
  7. arg5 As T5, _
  8. arg6 As T6, _
  9. arg7 As T7, _
  10. arg8 As T8, _
  11. arg9 As T9, _
  12. arg10 As T10, _
  13. arg11 As T11, _
  14. arg12 As T12, _
  15. arg13 As T13, _
  16. arg14 As T14, _
  17. arg15 As T15, _
  18. arg16 As T16 _
  19. )

Eso ya pinta dificil.

PREGUNTA: ¿Action tiene un límite de 16 argumentos?
(Quizás no llegue a saber hacer eso en toda mi vida xD, pero estaría bien saberlo si se da el caso.)

De todas formas con toda esta info doy por solucionado el tema xD,
Gracias por vuestras respuestas.




Bonito snippet:

Simple Delegate Example

Código
  1.    Imports System
  2.    Namespace DelegateTest
  3.    Public Delegate Sub TestDelegate(ByVal message As String)
  4.  
  5.    Class Program
  6.    Public Shared Sub Display(ByVal message As String)
  7.    Console.WriteLine("")
  8.    Console.WriteLine("The string entered is : " + message)
  9.    End Sub
  10.  
  11.    Shared Sub Main(ByVal args As String())
  12.    '-- Instantiate the delegate
  13.    Dim t As New TestDelegate(AddressOf Display)
  14.  
  15.    '-- Input some text
  16.    Console.WriteLine("Please enter a string:")
  17.    Dim message As String = Console.ReadLine()
  18.  
  19.    '-- Invoke the delegate
  20.    t(message)
  21.    Console.ReadLine()
  22.    End Sub
  23.    End Class
  24.    End Namespace

En línea

Como insertar un código:

 

-> Reglas del foro <-
Novlucker
Ninja y
Moderador Global
***
Desconectado Desconectado

Mensajes: 10.684


Yo que tu lo pienso dos veces


Ver Perfil
Re: Duda sobre los elementos que trabajan en segundo plano
« Respuesta #11 en: 18 Diciembre 2012, 18:36 »

PREGUNTA: ¿Action tiene un límite de 16 argumentos?
(Quizás no llegue a saber hacer eso en toda mi vida xD, pero estaría bien saberlo si se da el caso.)

Exacto, de hecho, la cantidad de parámetros depende de la versión del framework :P. Si necesitas más que eso deberías de declarar tu propio delegado.

Saludso
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
http://twitter.com/novlucker

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

spiritdead

Desconectado Desconectado

Mensajes: 295


Ver Perfil
Re: Duda sobre los elementos que trabajan en segundo plano
« Respuesta #12 en: 19 Diciembre 2012, 01:08 »

¿Y que me dicen de esto?
Código
  1.    ' Usage:
  2.    ' InvokeControl(RichTextBox1, Sub(x) x.AppendText("a"))
  3.  
  4. #Region " Invoke Controls "
  5.    Public Sub InvokeControl(Of T As Control)(ByVal Control As T, ByVal Action As Action(Of T))
  6.        If Control.InvokeRequired Then
  7.            Control.Invoke(New Action(Of T, Action(Of T))(AddressOf InvokeControl), New Object() {Control, Action})
  8.        Else
  9.            Action(Control)
  10.        End If
  11.    End Sub
  12. #End Region

Lo he testeado a fondo creando varios threads que modifican propiedades de varios controles al mismo tiempo, e incluso modifican el mismo control del form principal todos los threads al mismo tiempo, y no me ha saltado ninguna excepción, es decir, lo he podido usar sin escribir delegados...

¿Esa técnica la consideran buena o la idea de usar delegados sigue siendo mejor?

te lo resumo de 1 manera mas bonita

Código
  1.  
  2. Delegate Sub SetValue(ByVal value As Single, ByVal status As String)
  3.  
  4.  Public Sub SetValueObjects1(ByVal value As Single, ByVal status As String)
  5.        If KryptonProgressBar2.InvokeRequired Then
  6.            Dim d As New SetValue(AddressOf SetValueObjects1)
  7.            Me.Invoke(d, New Object() {value, status})
  8.        Else
  9.            KryptonLabel42.Text = ("(" & Math.Round(value, 1) & ")%")
  10.            KryptonProgressBar2.Value = value
  11.        End If
  12.    End Sub

esa es 1 manera bonita de usar delegados y bastante optimizada en cuanto a uso de sintaxis por decirlo asi

el codigo q puse es uno de los delegados mios q tome para darte 1 ejemplo
« Última modificación: 19 Diciembre 2012, 04:11 por spiritdead » En línea

Facilitador De Tareas - Task Simplifier (FDT)
Eleкtro
Moderador
***
Conectado Conectado

Mensajes: 5.985


"El escepticismo es la base de la inteligencia."


Ver Perfil
Re: Duda sobre los elementos que trabajan en segundo plano
« Respuesta #13 en: 19 Diciembre 2012, 06:32 »

el codigo q puse es uno de los delegados mios q tome para darte 1 ejemplo

Gracias
En línea

Como insertar un código:

 

-> Reglas del foro <-
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
segundo plano
Programación C/C++
Chero 8 2,646 Último mensaje 18 Mayo 2005, 17:27
por Pseudoroot
[Duda]Enviar y Recibir archivos en segundo plano[Threads-Solucionado(Builder)]
Programación C/C++
sulrun 7 1,602 Último mensaje 30 Abril 2007, 23:26
por Ragnarok
Duda Batch: ejecutar en segundo plano esto
Scripting
KainRedDemon 1 1,069 Último mensaje 30 Mayo 2008, 20:07
por MK-Ultra
Segundo plano
Redes
PoNcHo!! 1 704 Último mensaje 17 Julio 2008, 20:16
por l337*
jQuery sobre elementos generados
Desarrollo Web
Draco Heroicus 1 459 Último mensaje 28 Diciembre 2012, 16:21
por #!drvy
Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines