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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Threads en VB
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Threads en VB  (Leído 9,103 veces)
W0lFy


Desconectado Desconectado

Mensajes: 551



Ver Perfil WWW
Re: Threads en VB
« Respuesta #10 en: 5 Abril 2010, 07:25 am »

Citar
Hola, quisiera saber cual es el probelma principal, o sea el "porque" de que te tarde tanto procesar esos registros ¿podes poner el codigo de esos registros?...porque capas estas haciendo algo mal ahi...y procesar esa cantidad de registros no debe haber problemas...hay procesos que procesan mas registros y no usan thread para nada.

si quieres pongo aqui mi cogido y le hechais un vistazo, lo unico para lo que quiero los threads es por estetica, para que el formulario no se quede en modo "No Responde" al ser una operación tan grande:


Código
  1. Function AsignaOperaciones(fileName As String, ByRef matriz As totalExpedientes, PB1 As ProgressBar) As Integer
  2. Dim file As Integer
  3. Dim linea As String
  4. Dim lineaGestion As String
  5. Dim vDatos As Variant
  6. Dim indice As Long
  7. Dim gestion As Double
  8. Dim encontrado As Boolean
  9. file = FreeFile
  10. PB1.Min = 0
  11. PB1.Max = 149000
  12. Open fileName For Input As #file
  13.    Do Until EOF(file)
  14.        Line Input #file, linea
  15.        vDatos = Split(linea, "*")
  16.        gestion = 0
  17.        indice = BuscaExpediente(Val(vDatos(0)), matriz, encontrado)
  18.        lineaGestion = vDatos(2)
  19.  
  20.        If encontrado Then
  21.            If matriz.expedientes(indice).gestion <> "" Then
  22.                gestion = matriz.expedientes(indice).gestion
  23.            Else
  24.                gestion = 0
  25.            End If
  26.            matriz.expedientes(indice).TipoOperacion = vDatos(1)
  27.            matriz.expedientes(indice).gestion = gestion + CalculaSaldos(lineaGestion)
  28.            matriz.expedientes(indice).Asignacion = vDatos(3)
  29.            matriz.expedientes(indice).Defectuosa = vDatos(4)
  30.            matriz.expedientes(indice).Subsanada = vDatos(5)
  31.            matriz.expedientes(indice).Anulada = vDatos(6)
  32.         End If
  33.  
  34.  
  35.  
  36.  
  37.        If PB1.Max <> PB1.Value Then
  38.                PB1.Value = PB1.Value + 1
  39.        End If
  40.  
  41.    Loop
  42. Close #file
  43. PB1.Value = 0
  44. End Function
  45.  

 esto es una función, y la función BuscaExpediente es la siguiente:

Código
  1. Function BuscaExpediente(numExp As String, matriz As totalExpedientes, ByRef bandera As Boolean) As Long
  2. bandera = False
  3.    For i = 0 To matriz.numExpedientes - 1 Step 1
  4.        If numExp = matriz.expedientes(i).Expediente Then
  5.            bandera = True
  6.            BuscaExpediente = i
  7.            Exit Function
  8.        End If
  9.    Next
  10. BuscaExpediente = -1
  11. End Function

la estructura totalExpedientes es la siguiente

Código
  1. Type EstructuraExpediente
  2.    Expediente As String
  3.    FechaFirma As String
  4.    Procedencia As String
  5.    FechaFactura As String
  6.    Debe As String
  7.    Haber As String
  8.    Saldo As String
  9.    TipoOperacion As String
  10.    gestion As String
  11.    Defectuosa As String
  12.    Subsanada As String
  13.    Asignacion As String
  14.    Anulada As String
  15. End Type
  16. Type totalExpedientes
  17.    expedientes() As EstructuraExpediente
  18.    numExpedientes As Long
  19. End Type

En resumen, mi funcion buscaExpedientes realiza un bucle bastante grande,
y la funcion de AsignaOperaciones abre un archivo que contiene 150000 lineas con lo cual tiene que recorrer 150000 lineas y buscar en la matriz el correspondiente expediente para asignarle valores de la linea(cada linea corresponde a un expediente). Espero haberme explicado.. :)
Un saludo y Gracias!


« Última modificación: 5 Abril 2010, 08:22 am por ¤¤¤K@NuTöM@N¤¤¤ » En línea

K@NuT0
Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Threads en VB
« Respuesta #11 en: 5 Abril 2010, 17:32 pm »

Con DoEvents y/o Sleep(0) debe sobrar para que no se te laggee la interfaz... Estos has de ponerlos dentro del For...


En línea

W0lFy


Desconectado Desconectado

Mensajes: 551



Ver Perfil WWW
Re: Threads en VB
« Respuesta #12 en: 15 Abril 2010, 09:14 am »

Citar
Con DoEvents y/o Sleep(0) debe sobrar para que no se te laggee la interfaz... Estos has de ponerlos dentro del For...
gracias Karcrack no pensé que era tan facil... jeje ;)
En línea

K@NuT0
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con Threads en libreria SDL en C++
Programación C/C++
Guillermo575 9 7,502 Último mensaje 7 Abril 2011, 06:04 am
por Guillermo575
Threads-JFrame
Java
soser 2 5,129 Último mensaje 18 Abril 2011, 05:50 am
por soser
[Threads] wait() y notify() « 1 2 »
Java
klaine 13 9,790 Último mensaje 23 Junio 2011, 02:47 am
por Valkyr
Threads Affinity!
Programación C/C++
Khronos14 1 4,290 Último mensaje 29 Agosto 2011, 05:02 am
por pucheto
Problema con Threads en Java
Java
Norochii 3 4,862 Último mensaje 23 Septiembre 2013, 10:46 am
por Norochii
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines