Threads en VB

Iniciado por W0lFy, 29 Marzo 2010, 14:40 PM

0 Miembros y 2 Visitantes están viendo este tema.

W0lFy

#10
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 (vb) [Seleccionar]
Function AsignaOperaciones(fileName As String, ByRef matriz As totalExpedientes, PB1 As ProgressBar) As Integer
Dim file As Integer
Dim linea As String
Dim lineaGestion As String
Dim vDatos As Variant
Dim indice As Long
Dim gestion As Double
Dim encontrado As Boolean
file = FreeFile
PB1.Min = 0
PB1.Max = 149000
Open fileName For Input As #file
   Do Until EOF(file)
       Line Input #file, linea
       vDatos = Split(linea, "*")
       gestion = 0
       indice = BuscaExpediente(Val(vDatos(0)), matriz, encontrado)
       lineaGestion = vDatos(2)
       
       If encontrado Then
           If matriz.expedientes(indice).gestion <> "" Then
               gestion = matriz.expedientes(indice).gestion
           Else
               gestion = 0
           End If
           matriz.expedientes(indice).TipoOperacion = vDatos(1)
           matriz.expedientes(indice).gestion = gestion + CalculaSaldos(lineaGestion)
           matriz.expedientes(indice).Asignacion = vDatos(3)
           matriz.expedientes(indice).Defectuosa = vDatos(4)
           matriz.expedientes(indice).Subsanada = vDatos(5)
           matriz.expedientes(indice).Anulada = vDatos(6)
        End If
       
       
       
       
       If PB1.Max <> PB1.Value Then
               PB1.Value = PB1.Value + 1
       End If
       
   Loop
Close #file
PB1.Value = 0
End Function


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

Código (vb) [Seleccionar]
Function BuscaExpediente(numExp As String, matriz As totalExpedientes, ByRef bandera As Boolean) As Long
bandera = False
   For i = 0 To matriz.numExpedientes - 1 Step 1
       If numExp = matriz.expedientes(i).Expediente Then
           bandera = True
           BuscaExpediente = i
           Exit Function
       End If
   Next
BuscaExpediente = -1
End Function


la estructura totalExpedientes es la siguiente

Código (vb) [Seleccionar]
Type EstructuraExpediente
   Expediente As String
   FechaFirma As String
   Procedencia As String
   FechaFactura As String
   Debe As String
   Haber As String
   Saldo As String
   TipoOperacion As String
   gestion As String
   Defectuosa As String
   Subsanada As String
   Asignacion As String
   Anulada As String
End Type
Type totalExpedientes
   expedientes() As EstructuraExpediente
   numExpedientes As Long
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!
K@NuT0

Karcrack

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

W0lFy

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 ;)
K@NuT0