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 - Eleкtro

#3861
Cita de: El Benjo en 19 Febrero 2016, 00:28 AMla 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 respuesta comentario del gran mago y gurú de .Net, Hans Passant:
( desafortunadamente para ti, te recomiendo que no le des más vueltas, si lo dice Hans Passant no hay más que decir, es un genio del conocimiento qué nunca se equivoca. )

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: MSEMSE works by quickly attaching to a process when a stack trace is requested and the detaching the second the stack trace has been retrieved.
This way the interference in the normal operation of the process is minimized.

This means it has to done by an external process.
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.

Otro proyecto parecido sería este:
Tampoco lo he testeado ni se si tiene las mismas funcionalidades que el otro.

PD: Gracias por el comentario del ElektroKit !!

Saludos!
#3862
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 (csharp) [Seleccionar]
Thread t = Thread.CurrentThread;
StackTrace st = new StackTrace(t, needFileInfo: false);

( 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)

Un ejemplo algo más extenso, en Vb.Net:
Código (vbnet) [Seleccionar]
Public NotInheritable Class Form1 : Inherits Form

   Private Sub Test() Handles MyBase.Shown

       Dim t As Thread = New Thread(AddressOf Method1)
       t.Start()
       Thread.Sleep(100)
       t.Suspend()

       Dim st As New StackTrace(t, needFileInfo:=False)
       Console.WriteLine(st.GetFrame(2).GetMethod.Name) ' Resultado: Method2

   End Sub

   Public Sub Method1()
       Method2()
   End Sub

   Public Sub Method2()
       Thread.Sleep(Integer.MaxValue)
   End Sub

End Class


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!
#3864
Software / Re: SoundForge 8/9
18 Febrero 2016, 19:49 PM
Cita de: Zorronde en 18 Febrero 2016, 19:19 PMPero, NO es lo correcto, SmartScreen tiene que estar activado, eso es lo recomendado por Microsoft.

Las recomendaciones de Microsoft son para usuarios descerebrados y peligrosos consigo mismos que no sepan ni utilizar un lápiz, y de aprender a usarlo, lo utilizarían para experimentar a ver si cabe en la ranura USB de su PC.

...¿se entiende por donde voy?. Microsoft vende un producto y debe velar tanto por los usuarios avanzados como para los más burros, posiblemente esto les lleve a imponer "normas" o estándares de seguridad bastante EXCESIVAS (y a veces ridículas), como cuando le decimos a un bebé que no toque eso, por que se hará pupa.

Dejar el criterio personal a un lado para poner en un pedestal una opinión o estándar de Microsoft es lo peor que puedes hacer, lo correcto es confiar en el criterio de usuarios experimentados en la informática como por ejemplo el compañero Simorg, y siendo cauteloso con lo que hagas por ti mismo en el PC sin que te lo tenga que recordar Microsoft.

Yo también estoy muy cansado de repetirlo, y de intervenir en este tipo de posts, por que NO todo son virus, el achaque de "virus" a todo problema informático es algo equívoco y sobre explotado, ya sabes de sobra lo que es un FALSO POSITIVO Zorronde, pues por tu PC habrán pasado cientos de esos, pero tu erre que erre...

Dicho esto, también debo mencionar que 4shared simplemente es un file-hoster, así que es tan "seguro" como lo pueda ser un archivo aleatorio hospedado en Uploaded.net o Rapidgator. Pero por bajarte el archivo que te han indicado no va a pasarte nada.

Saludos!
#3865
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 (vbnet) [Seleccionar]
Imports System.Reflection
Imports System.Threading.Tasks

Public NotInheritable Class Main : Inherits Form

   Private Sub Test() Handles MyBase.Shown

       Dim t As New Thread(AddressOf Method1)
       t.Start()
       Debug.WriteLine("Main: " & MethodBase.GetCurrentMethod().Name) ' Test

       Task.Factory.StartNew(
           Sub()
               Debug.WriteLine("Lambda: " & MethodBase.GetCurrentMethod().Name) ' _Lambda$__n
           End Sub)

   End Sub

   Private Sub Method1()

       Dim stackTrace As New StackTrace
       Debug.WriteLine("Thread: " & MethodBase.GetCurrentMethod().Name) ' Method1

   End Sub

End Class


Traducción online a C#:
Código (csharp) [Seleccionar]
using System.Diagnostics;
using System.Reflection;
using System.Threading.Tasks;

public sealed class Main : Form {

   public Form1() {
       Shown += Test;
   }

   private void Test() {
       Thread t = new Thread(Method1);
       t.Start();
       Debug.WriteLine("Main: " + MethodBase.GetCurrentMethod().Name); // Test

       Task.Factory.StartNew(() => { Debug.WriteLine("Lambda: " + MethodBase.GetCurrentMethod().Name); }); // _Lambda$__n
   }

   private void Method1() {
       StackTrace stackTrace = new StackTrace();
       Debug.WriteLine("Thread: " + MethodBase.GetCurrentMethod().Name); // Method1
   }

}

//=======================================================
//Service provided by Telerik (www.telerik.com)
//=======================================================


Resultado de ejecución:
CitarMain: 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:



Vb.Net:
Código (vbnet) [Seleccionar]
''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Gets the current executing member in the stack trace of the application.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
''' <example> This is a code example.
''' <code>
''' Private Sub TestMethod()
'''
'''     MsgBox(CurrentMember.Name)
'''
''' End Sub
''' </code>
''' </example>
''' ----------------------------------------------------------------------------------------------------
''' <value>
''' The current executing member.
''' </value>
''' ----------------------------------------------------------------------------------------------------
Public Shared ReadOnly Property CurrentMember As MethodBase
   <DebuggerStepThrough>
   Get
       Dim stackTrace As New StackTrace
       Return stackTrace.GetFrame(1).GetMethod()
   End Get
End Property


Traducción online a C#:
Código (csharp) [Seleccionar]
/// ----------------------------------------------------------------------------------------------------
/// <summary>
/// Gets the current executing member in the stack trace of the application.
/// </summary>
/// ----------------------------------------------------------------------------------------------------
/// <value>
/// The current executing member.
/// </value>
/// ----------------------------------------------------------------------------------------------------
public static MethodBase CurrentMember {
get {
StackTrace stackTrace = new StackTrace();
return stackTrace.GetFrame(1).GetMethod();
}
}

//=======================================================
//Service provided by Telerik (www.telerik.com)
//=======================================================


Modo de empleo:

Vb.Net:
Código (vbnet) [Seleccionar]
Imports System.Reflection
Imports System.Threading.Tasks

Public NotInheritable Class Main : Inherits Form

   Private Sub Test() Handles MyBase.Shown

       Dim t As New Thread(AddressOf Method1)
       t.Start()
       Debug.WriteLine("Main: " & CurrentMember.Name) ' Test

       Task.Factory.StartNew(
           Sub()
               Debug.WriteLine("Lambda: " & CurrentMember.Name) ' _Lambda$__n
           End Sub)

   End Sub

   Private Sub Method1()

       Dim stackTrace As New StackTrace
       Debug.WriteLine("Thread: " & CurrentMember.Name) ' Method1

   End Sub

   Public Shared ReadOnly Property CurrentMember As MethodBase
       <DebuggerStepThrough>
       Get
           Dim stackTrace As New StackTrace
           Return stackTrace.GetFrame(1).GetMethod()
       End Get
   End Property

End Class


C#:
Código (csharp) [Seleccionar]
using System.Diagnostics;
using System.Reflection;
using System.Threading.Tasks;

public sealed class Main : Form {

   public Form1() {
       Shown += Test;
   }

   private void Test() {
       Thread t = new Thread(Method1);
       t.Start();
       Debug.WriteLine("Main: " + CurrentMember.Name); // Test
       
       Task.Factory.StartNew(() => { Debug.WriteLine("Lambda: " + CurrentMember.Name); }); // _Lambda$__n
   }

   private void Method1() {
       StackTrace stackTrace = new StackTrace();
       Debug.WriteLine("Thread: " + CurrentMember.Name); // Method1
   }

   public static MethodBase CurrentMember {
       [DebuggerStepThrough()]
       get {
           StackTrace stackTrace = new StackTrace();
           return stackTrace.GetFrame(1).GetMethod();
       }
   }

}

//=======================================================
//Service provided by Telerik (www.telerik.com)
//=======================================================


Resultado de ejecución:
CitarMain: Test
Thread: Method1
Lambda: _Lambda$__2

Saludos!
#3866
No utilizo VB6, pero creo que el símbolo de continuación de linea se puede usar de esta misma manera:

Código (vb) [Seleccionar]

If Check52.Caption = Check1.Caption Or Check52.Caption = Check2.Caption Or Check52.Caption = Check3.Caption _
Or Check52.Caption = Check4.Caption Or Check52.Caption = Check5.Caption Or Check52.Caption = Check6.Caption _
Or Check52.Caption = Check7.Caption Or Check52.Caption = Check8.Caption Or Check52.Caption = Check9.Caption _
Or Check52.Caption = Check10.Caption Or Check52.Caption = Check11.Caption Or Check52.Caption = Check12.Caption _
Or Check52.Caption = Check13.Caption Or Check52.Caption = Check14.Caption Or Check52.Caption = Check15.Caption _
Or Check52.Caption = Check16.Caption Or Check52.Caption = Check17.Caption Or Check52.Caption = Check18.Caption _
Or Check52.Caption = Check19.Caption Or Check52.Caption = Check20.Caption Or Check52.Caption = Check21.Caption _
Or Check52.Caption = Check22.Caption Or Check52.Caption = Check23.Caption Or Check52.Caption = Check24.Caption _
Or Check52.Caption = Check25.Caption Or Check52.Caption = Check26.Caption Or Check52.Caption = Check27.Caption Then
   msgbox "1"

Else
   msgbox "2"

End If


PD: Deberías crear un Array con los 52 controles (o los que sean), e iterarlo.

Saludos
#3867
Scripting / Re: Ayuda programación python
18 Febrero 2016, 00:53 AM
Cita de: Biodude9456 en 18 Febrero 2016, 00:27 AMMe dice que float y str son incompatibles

Puedes convertir el tipo int a str para poder realizar la concatenación, o usar un formato de string.

Código (python) [Seleccionar]
name = raw_input("Dame tu nombre:")
print("Ola k ase " + name)

valueA = int(input("Di el numero que quieres multiplicar: "))
valueB = int(input("Di el numero con el que quieres multiplicar: "))

i = 0
while (i < valueB):
i += 1
print(str(i) + " * " + str(valueA) + " = " + str(valueA * i))


resultado de ejecución:
CitarDame tu nombre:Elektro
Ola k ase Elektro
Di el numero que quieres multiplicar: 5
Di el numero con el que quieres multiplicar: 5
1 * 5 = 5
2 * 5 = 10
3 * 5 = 15
4 * 5 = 20
5 * 5 = 25


Saludos
#3869
Cita de: EagleStrike en 17 Febrero 2016, 23:29 PMNótese que conozco el comando TIMEOUT, pero intento no usarlo porque muestra diálogos ("Esperando x segundos, presione Ctrl+C para omitir...") lo cual arruinaría la credibilidad del módulo entero.

Puedes redireccionar el output:
(Timeout.exe /T 5)1>Nul

Y como alternativa del comando TimeOut, puedes utilizar Ping:
(ping.exe 127.0.0.1 -n 6)1>Nul

saludos!
#3870
Scripting / Re: Ayuda con batch y txt
18 Febrero 2016, 00:21 AM
Creo que con este código tienes por donde orientarte...:

Código (dos) [Seleccionar]
@Echo OFF & SetLocal EnableDelayedExpansion & Title by Elektro

Set /A "flag=0"

For /F "UseBackQ Tokens=* Delims=" %%a In (
"C:\Users\Administrador\Desktop\1.txt"
) Do (
(Echo "%%a" | Find.exe /I "Reposición")1>Nul && (Set /A "flag=0")
(Echo "%%a" | Find.exe /I "Recuento"  )1>Nul && (Set /A "flag=1")
(Echo "%%a" | Find.exe /I "Recibo"    )1>Nul && (Set /A "flag=2")

If !flag! EQU 0 (Echo Reposición de efectivo: %%a)
If !flag! EQU 1 (Echo Recuento de efectivo  : %%a)
If !flag! EQU 2 (Echo Recibo de balance     : %%a)

)

Pause&Exit /B 0


Resultado de ejecución:
CitarReposición de efectivo: Cajero 2075
Recuento de efectivo  : Recuento de efectivo
Recuento de efectivo  : 500
Recibo de balance     : Recibo de balance
Recibo de balance     : 700
Reposición de efectivo: Reposición de efectivo
Reposición de efectivo: 900
Reposición de efectivo: Cajero3087
Reposición de efectivo: Reposicion de efectivo
Reposición de efectivo: 800
Reposición de efectivo: Cajero 6789
Recibo de balance     : Recibo de balance
Recibo de balance     : 700
Reposición de efectivo: Reposición de efectivo
Reposición de efectivo: 600
Presione una tecla para continuar . . .

Saludos