Título: (SOLUCIONADO) Duda sobre los elementos que trabajan en segundo plano Publicado por: Eleкtro en 17 Diciembre 2012, 09:14 am 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 Título: Re: Duda sobre los elementos que trabajan en segundo plano Publicado por: spiritdead en 17 Diciembre 2012, 10:50 am Hola, sub es un subrutina por decirle asi donde puedes enviarle parametros¿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 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 Título: Re: Duda sobre los elementos que trabajan en segundo plano Publicado por: Eleкtro en 17 Diciembre 2012, 12:20 pm 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. Título: Re: Duda sobre los elementos que trabajan en segundo plano Publicado por: Novlucker en 17 Diciembre 2012, 13:06 pm Si, todo eso que mencionas bloquea la app si no son llamados desde otro thread, o desde un BackgroundWorker por ejemplo.
Saludos Título: Re: Duda sobre los elementos que trabajan en segundo plano Publicado por: kub0x en 17 Diciembre 2012, 13:09 pm 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. Título: Re: Duda sobre los elementos que trabajan en segundo plano Publicado por: spiritdead en 18 Diciembre 2012, 00:51 am 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 :) Título: Re: Duda sobre los elementos que trabajan en segundo plano Publicado por: Eleкtro en 18 Diciembre 2012, 16:07 pm ¿Y que me dicen de esto?
Código
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? Título: Re: Duda sobre los elementos que trabajan en segundo plano Publicado por: Novlucker en 18 Diciembre 2012, 16:56 pm [...] lo he podido usar sin escribir delegados [...] No has declarado un delegado, has utilizado uno predefinido, ¿que crees que es Action? :P Saludos Título: Re: Duda sobre los elementos que trabajan en segundo plano Publicado por: Eleкtro en 18 Diciembre 2012, 17:20 pm 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 Título: Re: Duda sobre los elementos que trabajan en segundo plano Publicado por: Novlucker en 18 Diciembre 2012, 17:43 pm 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 Título: Re: Duda sobre los elementos que trabajan en segundo plano Publicado por: Eleкtro en 18 Diciembre 2012, 18:14 pm Action http://msdn.microsoft.com/en-us/library/018hxwa8.aspx Código
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
Título: Re: Duda sobre los elementos que trabajan en segundo plano Publicado por: Novlucker en 18 Diciembre 2012, 18:36 pm 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 Título: Re: Duda sobre los elementos que trabajan en segundo plano Publicado por: spiritdead en 19 Diciembre 2012, 01:08 am ¿Y que me dicen de esto? Código
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
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 Título: Re: Duda sobre los elementos que trabajan en segundo plano Publicado por: Eleкtro en 19 Diciembre 2012, 06:32 am el codigo q puse es uno de los delegados mios q tome para darte 1 ejemplo Gracias Título: Re: Duda sobre los elementos que trabajan en segundo plano Publicado por: spiritdead en 19 Diciembre 2012, 07:36 am Gracias cuando hagas un Invokerequired enfocate en el objeto directo, no lo envies parametrizado trabajando esa parte dinamicamente porque a veces al trabajar con forms dinamicos, te salen errores bastante peculiares :P mi recomendacion es 1 delegado por cada control q necesites usar desde otro hilo =) asegurandote q asi tengas multiples instancias de forms con controles repetidos, no genere NI un error :) Título: Re: (SOLUCIONADO) Duda sobre los elementos que trabajan en segundo plano Publicado por: Eleкtro en 19 Diciembre 2012, 15:24 pm una pregunta que me acaba de surgir...
¿hay un máximo de instancias de thread y/o backgroundworker?, imagino que un proceso no puede crear 100 subprocesos...(O si?) ¿Donde está el límite?, ¿y las instancias de los subprocesos se eliminan con un "dispose" para liberar sus recursos, ¿o se auto eliminan de la memoria cuando el backgroundworkercompleted sucede? Título: Re: (SOLUCIONADO) Duda sobre los elementos que trabajan en segundo plano Publicado por: Novlucker en 19 Diciembre 2012, 16:01 pm Recursos ...
http://eknowledger.wordpress.com/2012/05/01/max-number-of-threads-per-windows-process/ Saludos Título: Re: (SOLUCIONADO) Duda sobre los elementos que trabajan en segundo plano Publicado por: Eleкtro en 19 Diciembre 2012, 16:18 pm Buenísima info la que comenta esa persona en su problema,
Así que el límite depende de la cantidad de RAM en el PC donde se use la APP, cada hilo tiene un tamaño inicial de 1 mb en memória "stacksize", Y el buffer máximo de memória se puede modificar/reducir para cada hilo "maxstacksize" por ejemplo a 256 KB Perfecto, Gracias ^^ |