Foros del Web » Programación para mayores de 30 ;) » .NET »

"No responde" con For To

Estas en el tema de "No responde" con For To en el foro de .NET en Foros del Web. Hola bueno nesesito un programa que haga muchas rutinas simultaneas muy pero muy rapido.... Pues lo primero que se me viene a la cabeza fue ...
  #1 (permalink)  
Antiguo 05/04/2012, 12:41
 
Fecha de Ingreso: febrero-2011
Mensajes: 99
Antigüedad: 13 años, 9 meses
Puntos: 10
Exclamación "No responde" con For To

Hola bueno nesesito un programa que haga muchas rutinas simultaneas muy pero muy rapido....


Pues lo primero que se me viene a la cabeza fue el Timer, pero el timer no es tan rapido, pues se que existe otra alternativa que es el "For To" y es exactamente lo que nesesito...

El problema es que al tener numeros muy altos como 100,000 el programa se traba y "No responde", he tratado con todo inclusive usando la libreria "kernel32" para usar "Sleep"

Cita:
Iniciado por kernel32(Sleep)
Solo se tiene que poner...

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

y despues la llamas usando:

Sleep(TIEMPO EN MILISEGUNDOS)
Pero lametablemente el programa se me sigue trabando... /:

¿Como puedo solucionarlo?
  #2 (permalink)  
Antiguo 05/04/2012, 17:01
Avatar de elarrieux  
Fecha de Ingreso: abril-2012
Ubicación: Uruguay
Mensajes: 67
Antigüedad: 12 años, 7 meses
Puntos: 26
Respuesta: "No responde" con For To

Hola!

Si el programa se te traba, para que usas Sleep?

Podrias pegar parte del codigo para mirarlo?

Sds.
  #3 (permalink)  
Antiguo 05/04/2012, 17:18
 
Fecha de Ingreso: febrero-2011
Mensajes: 99
Antigüedad: 13 años, 9 meses
Puntos: 10
Respuesta: "No responde" con For To

Bueno.. aca un resumen del codigo...

Código vb:
Ver original
  1. Public Class Form1
  2.  
  3.     Private a As Double
  4.  
  5.     Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  6.  
  7.         For i = 0 To 100000000
  8.             a += 1
  9.             Me.Text = a
  10.         Next
  11.  
  12.     End Sub
  13. End Class

Eso seria como un pequeño resumen de la falla del For, creo que lo que pasa es que hace mas solicitudes que el soporte de la RAM y eso creo que es el error... posiblemente...

Pueden haber 2 posibles fallas dependiendo que tan extenso sea el codigo...
mayormente para este ocurre que se te hace imposible mover la pantalla y dentro de poco todo funciona con algunos segundos de intervalo... osea haces clic y recien la PC procesa el clic despues de unos segundos...

cuando hay mayor cantidad de lineas (en mi programa son 153 adentro del For) simplemente se congela el programa y te pide cerrarlo.

Puedo usar Timer y va perfecto, pero el Timer es muy lento inclusive poniendole 1 milisegundo...

Si hubiera alguna forma de hacer que el For no consuma tanto creo que seria la solucion...

Y lo peor de todo es que ni en google sale solucion :3

Te recomiendo que si vas a probar el codigo guardes todos tus archivos ya que posiblemente tengas que reinciar si se congela todo...

Última edición por doword; 05/04/2012 a las 17:35
  #4 (permalink)  
Antiguo 05/04/2012, 20:54
Avatar de elarrieux  
Fecha de Ingreso: abril-2012
Ubicación: Uruguay
Mensajes: 67
Antigüedad: 12 años, 7 meses
Puntos: 26
Respuesta: "No responde" con For To

Lo que tenes que hacer es tirar la tarea en un nuevo Thread.

Va ejemplo, funciona ya lo probe:

Código:
Imports System.Threading

Public Class Form1

    Private demoThread As Thread
    Private a As Double

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click

        Me.demoThread = New Thread(New ThreadStart(AddressOf Me.ThreadProcUnsafe))

        Me.demoThread.Start()

    End Sub

    Private Sub ThreadProcUnsafe()
        For i = 0 To 100000000
            a += 1
            ActualizarBoton(Me.Button1, a.ToString)
        Next
    End Sub

    Sub ActualizarBoton(btn As Button, text As String)
        If btn.InvokeRequired Then
            btn.Invoke(New Action(Of Button, [String])(AddressOf ActualizarBoton), New Object() {btn, text})
        Else
            btn.Text = text
        End If
    End Sub
End Class
Espero te sirva.

Sds.
  #5 (permalink)  
Antiguo 05/04/2012, 21:10
 
Fecha de Ingreso: febrero-2011
Mensajes: 99
Antigüedad: 13 años, 9 meses
Puntos: 10
Respuesta: "No responde" con For To

Cita:
Iniciado por elarrieux Ver Mensaje
Lo que tenes que hacer es tirar la tarea en un nuevo Thread.

Va ejemplo, funciona ya lo probe:

Código:
code...
Espero te sirva.

Sds.
Oh, wow!!

Eres un dios, la verdad que no conosia eso de los thread, gracias! (=

Etiquetas: responde
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:06.