Título: Obtener el nombre de la función que ejecuta un hilo. Publicado por: El Benjo en 18 Febrero 2016, 07:36 am Hola. Buen día.
No encuentro la manera de obtener el nombre del método que está ejecutando un hilo en particular. Ya busqué dentro de la clase ProcessThread pero creo que esa clase no me da esa información. Muchas gracias por su ayuda. Título: Re: Obtener el nombre de la función que ejecuta un hilo. Publicado por: fary en 18 Febrero 2016, 09:27 am Quieres saber el nombre que tu le diste a la funcion al programarla?
Para que quieres saber eso? Saludos. Título: Re: Obtener el nombre de la función que ejecuta un hilo. Publicado por: Eleкtro en 18 Febrero 2016, 09:54 am Creo que tu pregunta se puede interpretar de varias maneras, y de si intentas obtenerlo el nombre del método desde el thread adicional o el thread de la UI, por favor, muestra el código relevante.
De todas formas, creo que este ejemplo basado en Reflection solventará tus dudas: Vb.Net: Código
Traducción online a C#: Código
Resultado de ejecución: Citar Main: Test Thread: Method1 Lambda: _Lambda$__2 Si lo prefieres también puedes utilizar una propiedad como esta de aquí abajo para tenerla siempre a mano. El código fuente lo he extraido de mi API ElektroKit: (http://i.imgur.com/5nJK3J2.png) (https://github.com/ElektroStudios/ElektroKit/blob/6fbce42a8c59b0a06f679a369d19b7a1282023d0/Solution/v1.2/Elektro.Diagnostics/Tools/DebugUtil_Properties.vb) Vb.Net: Código
Traducción online a C#: Código
Modo de empleo: Vb.Net: Código
C#: Código
Resultado de ejecución: Citar Main: Test Thread: Method1 Lambda: _Lambda$__2 Saludos! Título: Re: Obtener el nombre de la función que ejecuta un hilo. Publicado por: El Benjo en 18 Febrero 2016, 19:53 pm Muy bien, tienen razón, quizá no he sabido como expresar mi necesidad.
Mi aplicación hace lo siguiente: Carga librerías dinámicas que encuentre en un directorio en específico y corre (de encontrase) el método 'start()' en cada una de ellas. El código de las librerías puede correr varios hilos sobre distintos métodos y estos, al ser de terceros, desconozco su nombre. Ahora la aplicación muestra los hilos que se encuentran dentro del dominio de la aplicación. Lo que necesito pero no he encontrado información para hacerlo es saber el método que está ejecutando cada uno de esos hilos y, de ser posible el ensamblado al que pertenece dicho método. La única forma que se me ha ocurrido para hacerlo es con la propiedad ProcessThreads al obtener un objeto del proceso actual y sacar la dirección en memoria en cada uno de estos elementos y compararla con la dirección en memoria de cada uno de los métodos contenidos en cada ensamblado. Pero esto se me hace un desperdicio de ciclos de procesador, además de que tendría que explorar de manera recursiva cada clase dentro del ensamblado para obtener la dirección de su método y compararla. Y si el método está declarado en una clase fuera del ensamblado entonces ya no podré obtenerla por este método. Elektro, el código relevante no puedo mostrarlo porque realmente no existe. Espero que exista una manera de hacer esto que pido: Conocer el nombre de los métodos que ejecuta cada hilo dentro del proceso actual, la clase o ensamblado al que pertenece y saberlo desde un hilo distinto al que lo está ejecutando. Muchas gracias a todos quienes se tomen la molestia en responder. Título: Re: Obtener el nombre de la función que ejecuta un hilo. Publicado por: Eleкtro en 18 Febrero 2016, 20:22 pm En resumidas cuentas tendrías que obtener el stack-trace de ese hilo o hilos, y analizar sus stack-frames para obtener el método. Pero claro, para eso debes administrar/crear tu los hilos... si los hilos son creados por algún método de dicha librería entonces sinceramente no se me ocurre una solución.
De todas formas te muestro un ejemplo por si te sirve de algo... Observa la propiedad que publiqué, la metodología sería parecida solo que utilizando el constructor que acepta un thread: Código ( esta metodología está considerada obsoleta por Microsoft, sin embargo, tampoco proporcionan ninguna alternativa: https://msdn.microsoft.com/en-us/library/t2k35tat%28v=vs.110%29.aspx (https://msdn.microsoft.com/en-us/library/t2k35tat%28v=vs.110%29.aspx)) Un ejemplo algo más extenso, en Vb.Net: Código
PD: ElBenjo, ¿es necesario determinar esa información en tiempo de ejecución por algún motivo?, ¿no te basta con cojer el .Net Reflector y examinar el código fuente de la librería a ver que métodos se llaman en sus threads?. Saludos! Título: Re: Obtener el nombre de la función que ejecuta un hilo. Publicado por: El Benjo en 19 Febrero 2016, 00:28 am Elektro, gracias por responder.
No, lo que pasa es que no soy yo el que necesita la información sino mi aplicación. Es decir, que toda la información que necesito es información en tiempo de ejecución y yo no sé (como ya comenté antes) que librerías son las que van a estar ejecutando código ni cual es el código. La aplicación se basa en módulos y los módulos pueden ser escritos por cualquiera, sin embargo la aplicación deber ser capaz de reconocer no sólo la cantidad de hilos que se ejecutan en el proceso sino también el módulo que los creo. Seguiré buscando a ver si encuentro algo. Muchas gracias, Elektro. Ah, y de paso felicitarte por el trabajo de tu librería. La verdad se nota que le invertiste mucho tiempo y esfuerzo. Título: Re: Obtener el nombre de la función que ejecuta un hilo. Publicado por: Eleкtro en 19 Febrero 2016, 00:53 am la aplicación deber ser capaz de reconocer no sólo la cantidad de hilos que se ejecutan en el proceso sino también el módulo que los creo. Al parecer eso que ahora mencionas es imposible de monitorizar al no poder ser notificado por la propia aplicación, según un
Sin embargo, al parecer existe algún proyecto como este de aquí abajo, el cual, supuestamente, desde un proceso externo a tu app, es capaz de monitorizar la creación de threads de tu app.
Cita de: MSE MSE works by quickly attaching to a process when a stack trace is requested and the detaching the second the stack trace has been retrieved. Parece interesante, no lo he testeado ...pero imagino que te podría servir. Y si no te sirve del todo pues... lo bueno es que puedes coger el source del MSE y adaptarlo a tus necesidades.This way the interference in the normal operation of the process is minimized. This means it has to done by an external process. Otro proyecto parecido sería este:
PD: Gracias por el comentario del ElektroKit !! Saludos! Título: Re: Obtener el nombre de la función que ejecuta un hilo. Publicado por: El Benjo en 19 Febrero 2016, 06:22 am Muchíssimas gracias por la ayuda, Elektro y por tomarte el tiempo para investigar. La verdad es que llevo casi una semana investigado y no he podido encontrar nada. Veré si eso me sirve, y si no, pues adaptaré el código que mencionas. La otra opción es modificar mi aplicación. Sin embargo, somos programadores y como tal, no debería haber un límite en lo que podemos crear, por eso me rehusaré lo más que pueda a modificar los objetivos de mi aplicación.
Un gran saludo, Elektro. |