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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  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,061 veces)
W0lFy


Desconectado Desconectado

Mensajes: 551



Ver Perfil WWW
Threads en VB
« en: 29 Marzo 2010, 14:40 pm »

Buenas, estoy haciendo una pequeña aplicacion en VB pero se queda aparentemente colgada debido a que el bucle es demasiado lento, porque recorre unos 150000 registros, intento llevar un co0ntrol mediante una progress bar, y parece funcionar mas o menos bien pero la ventana del formulario se queda un poco colgada, existe alguna manera de ejecutar esta accion sin que  afecte al formulario principal? es mediante Threads? Un saludo


En línea

K@NuT0
skyweb07

Desconectado Desconectado

Mensajes: 122


The ghost of the network


Ver Perfil
Re: Threads en VB
« Respuesta #1 en: 29 Marzo 2010, 15:29 pm »

Podrias utilizar un DoEvents cada vez que pasas un registro para que se le quite un poco el colgamiento pero no se me ocurre otra cosa... Al no ser... ¿Usas ADO o MySql?


En línea

j@son

Desconectado Desconectado

Mensajes: 27


ZOOropa


Ver Perfil
Re: Threads en VB
« Respuesta #2 en: 30 Marzo 2010, 03:35 am »

Buenas,
Esta página la he encontrado buscando por google.

Cito:
[...]
La utilización de Multithreading en VB6 no está recomendado ni soportado. No
obstante, existen artículos en Internet que muestran su utilización. Uno de
los mejores es el siguiente:

A Thread to Visual Basic: Multi-Threading In VB5 and VB6
http://www.freevbcode.com/ShowCode.asp?ID=1287
[...]

En .NET, ésto ya no es problema ;-)

saludos.
En línea

- J@son -
W0lFy


Desconectado Desconectado

Mensajes: 551



Ver Perfil WWW
Re: Threads en VB
« Respuesta #3 en: 30 Marzo 2010, 08:20 am »

encontre este codigo, bueno... antes de ver el post, lo unico que no funciona me salta el siguiente error

Uso invalido de Address of !!

Código
  1. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2. Private Declare Function CreateThread Lib "kernel32" (lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
  3. Private Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
  4. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  5. Public hThread As Long, hThreadID As Long
  6.  
  7. Private Sub Command1_Click()
  8.    'KPD-Team 1999
  9.    'URL: http://www.allapi.net/
  10.    'E-Mail: KPDTeam@Allapi.net
  11.    'After you click this button, try to move the window
  12.    'You will see that the AsyncThread-function was executed asynchronously
  13.    hThread = CreateThread(ByVal 0&, ByVal 0&, AddressOf AsyncThread, ByVal 0&, ByVal 0&, hThreadID) ' en esta linea me da el error en Address OF
  14.    CloseHandle hThread
  15. End Sub
  16.  
  17. Private Sub Form1_Unload(Cancel As Integer)
  18.  
  19.    'If the thread is still running, close it
  20.    If hThread <> 0 Then TerminateThread hThread, 0
  21.  
  22. End Sub
  23.  
  24. 'In a module
  25.  
  26.  
  27.  
  28. Function AsyncThread() As Integer
  29.  
  30.    'Let this thread sleep for 10 seconds
  31.  
  32.    Sleep 10000
  33.    hThread = 0
  34.  
  35. End Function


Que ocurre? Un saludo
En línea

K@NuT0
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Threads en VB
« Respuesta #4 en: 30 Marzo 2010, 09:04 am »


Código
  1. 'In a module
  2.  
  3.  
  4.  
  5. Function AsyncThread() As Integer
  6.  
  7.    'Let this thread sleep for 10 seconds
  8.  
  9.    Sleep 10000
  10.    hThread = 0
  11.  
  12. End Function
  13.  

Ojo es es un modulo.

Sangriento Infierno Lunar!¡.
En línea

The Dark Shadow is my passion.
W0lFy


Desconectado Desconectado

Mensajes: 551



Ver Perfil WWW
Re: Threads en VB
« Respuesta #5 en: 30 Marzo 2010, 09:29 am »

es verdad tienes razon, al compilar.... si ejecuto el EXE me tira un error..... y no sigue ejecutando... te pongo el codigo

Código
  1. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2. Private Declare Function CreateThread Lib "kernel32" (lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
  3. Private Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
  4. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  5. Public hThread As Long, hThreadID As Long
  6.  
  7. Private Sub Command1_Click()
  8.    hThread = CreateThread(ByVal 0&, ByVal 0&, AddressOf AsyncThread, ByVal 0&, ByVal 0&, hThreadID)
  9.    CloseHandle hThread
  10. End Sub
  11.  
  12.  
  13.  
  14.  
  15. Private Sub Form_Unload(Cancel As Integer)
  16.    If hThread <> 0 Then TerminateThread hThread, 0
  17. End Sub
  18.  
  19. 'in a module
  20.  
  21. Public Sub AsyncThread()
  22.  
  23.   For i = 1 To 5
  24.   MsgBox i
  25.   Next
  26.   hThread = 0
  27.  
  28. End Sub
« Última modificación: 30 Marzo 2010, 09:45 am por ¤¤¤K@NuTöM@N¤¤¤ » En línea

K@NuT0
Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Threads en VB
« Respuesta #6 en: 30 Marzo 2010, 10:45 am »

Aprende C++ o java  :D

Saludos
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Threads en VB
« Respuesta #7 en: 30 Marzo 2010, 23:16 pm »

Aprende C++ o java  :D

Saludos

En lugar de java mejor c/c++ java usalo si te lo exigen otros... pero por mi parte y de forma personal mejor c/c++, esto por lo de la VM de java, aun que a las empresas con sus PC chafas como en Telecom les importa una ***** y piden java para ss sitemas... tardan años en ejecutar sus aplicacione (Experiencia propia).

Sangriento Infierno Lunar!¡.
En línea

The Dark Shadow is my passion.
W0lFy


Desconectado Desconectado

Mensajes: 551



Ver Perfil WWW
Re: Threads en VB
« Respuesta #8 en: 31 Marzo 2010, 09:18 am »

Citar
Aprende C++ o java

si realmente se programar en C/c++  o java, sólo que hice la aplicación en VB porque estaba orientada a BBDD de lotus y el codigo de VB es similar al de LOTUS,la proxima vez empezare el proyecto en C/C++ y todo perfecto, por cierto...odio java. ;).

Simplemente lo quiero por estética, pero si no se puede tampoco lo realizo, lo unico que quiero es que haga en 2º plano un bucle que es bastante grande, donde tiene una funcion de busqueda que tiene tambien un bucle bastante grande, entonces digamos que si quiero hacer esto:

Código
  1. sub funcion1(indice as string,max as long,BBDD as EstructuraDatos,PB1 as progressbar)
  2.  
  3. PB1.value=0
  4. for i=1 to max 'max = 150000
  5. busca(indice,BBDD) '-> esta funcion tiene un bucle for de 1 hasta 145000 tambien.
  6. PB1.value=PB1.value +1
  7. next
  8. End sub

pos lo unico que quiero es realizar la funcion1 en 2º plano, ya que el formulario se queda "Colgado" al ser una operación que lleva tanto tiempo, para que estéticamente la progressbar se vaya incrementando y el formulario no tenga el aspecto de "colgado" (No Responde)que se produce cuando un programa realiza un algoritmo muy grande, porque se queda con la ventana del form en blanco... hasta que realiza el algoritmo por completo.

Si existe solución me gustaría saberla, hasta ahora he utilizado la API de createThread y no parece funcionar muy bien en VB, o realmente no la he implementado bien, alguien podría ayudarme?
« Última modificación: 31 Marzo 2010, 09:20 am por ¤¤¤K@NuTöM@N¤¤¤ » En línea

K@NuT0
seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Threads en VB
« Respuesta #9 en: 1 Abril 2010, 21:10 pm »

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.

saludos.
En línea

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,462 Último mensaje 7 Abril 2011, 06:04 am
por Guillermo575
Threads-JFrame
Java
soser 2 5,118 Último mensaje 18 Abril 2011, 05:50 am
por soser
[Threads] wait() y notify() « 1 2 »
Java
klaine 13 9,746 Último mensaje 23 Junio 2011, 02:47 am
por Valkyr
Threads Affinity!
Programación C/C++
Khronos14 1 4,281 Último mensaje 29 Agosto 2011, 05:02 am
por pucheto
Problema con Threads en Java
Java
Norochii 3 4,852 Último mensaje 23 Septiembre 2013, 10:46 am
por Norochii
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines