Domingo 22 de Diciembre de 2024, 20:34
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Procesos Paralelos
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Procesos Paralelos (Leído 4300 veces)
Jose Arriagada
Miembro MUY activo
Mensajes: 373
Procesos Paralelos
«
en:
Miércoles 5 de Enero de 2005, 14:05 »
0
Amigos:
Tengo el siguiente problema:
En un command1, tengo instrucciones que realizan algunos procesos sobre tablas y calculos varios.
Esto se demora su tiempo.
Para aprovechar esto, quiere tener la posibilidad de poder presionar otro command2 que realice otro tipo de acciones.
Es posible?
Ya que al presionar el command1, no puedo hacer nada hasta que el proceso termine.
Existe alguna forma?
Podrian decirme como, o indicarme donde encontrar algun codigo de ejemplo.
Gracias
Tweet
martin campos quintero
Miembro MUY activo
Mensajes: 113
Nacionalidad:
Re: Procesos Paralelos
«
Respuesta #1 en:
Jueves 6 de Enero de 2005, 06:30 »
0
Me imagino que para sucederte eso al presionar el command1 lo que tienes dentro de el es un ciclo.
Bien pues lo que yo hago para hacer varias acciones es, pues simular el ciclo en un timer y asi podrias presionar el command2 para que haga sus instrucciones tambien.
O sea el chiste de todo es simular lo que hace el ciclo, pero con un timer.
Espero te sirva de algo esta opinion
Agiliza tus búsquedas en NETFLIX MEXICO y próximamente más países de latinoamérica.
desarrollo
Miembro activo
Mensajes: 74
Re: Procesos Paralelos
«
Respuesta #2 en:
Jueves 6 de Enero de 2005, 20:33 »
0
hola Zerocool
a mi tambien me interesa como determinar dentro de un timer hacer dos o mas procesos que contengan ciclos cada uno, osea de que manera lo planteas
gracias por tus comentarios
desarrollo
ArKaNtOs
Miembro de PLATA
Mensajes: 1253
Nacionalidad:
Re: Procesos Paralelos
«
Respuesta #3 en:
Viernes 7 de Enero de 2005, 18:26 »
0
Hola Jose, mira si lo que estas haciendo es un ciclo, puedes utilizar la funcion DoEvents, dentro del ciclo y con eso mientras esta realizandose el bucle, puedes oprimir el boton que quieras y hara el otro proceso y luego continuara con el ciclo
checalo te lo recomiendo
bye
solocodigo
el punto de encuentro de los programadores
VB
,
C
,
C++
,
.Net
,
Java
,
Delphi
,
Linux
,
Programacion de Videojuegos
,
ASM
,
Dudas Informaticas
.
ArKaNtOs
Miembro de PLATA
Mensajes: 1253
Nacionalidad:
Re: Procesos Paralelos
«
Respuesta #4 en:
Sábado 8 de Enero de 2005, 05:18 »
0
Hola Jose perdona mi torpeza
por no dejarte ejemplos, pero te hice uno sencillito para ver si eso es lo que deseas
, mira este y pruebalo:
Private Sub Command1_Click()
For a = 1 To 100000
DoEvents 'linea que te decia
List1.AddItem a
Next
End Sub
Private Sub Command2_Click()
msgbox "hola"
End Sub
mira este ejemplo consisten dos comands button y un list, el list es para hacer un conteo de 100000 numeros, eso tardara un poco, pero ponle que quieres hacer otra cosas mientras esta el conteo pues con el doevents puedes mandar el control a otras cosas y seguir otro proceso, ahora si espero que te haya quedado bien
bueno ahi nos vermox, cuidense, bye
solocodigo
el punto de encuentro de los programadores
VB
,
C
,
C++
,
.Net
,
Java
,
Delphi
,
Linux
,
Programacion de Videojuegos
,
ASM
,
Dudas Informaticas
.
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Procesos Paralelos
«
Respuesta #5 en:
Martes 11 de Enero de 2005, 16:05 »
0
Hola.
Crea
otro ejecutable distinto
, un subprograma, vamos, que realice esa labor que tarda tanto. Llámalo desde la aplicación principal de una forma similar a esta:
Código: Text
Option Explicit
Private Const STILL_ACTIVE = &H103
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub ExecProceso(Byval ExeFileName As String)
On Error GoTo Err_Exec
Dim lPId As Long, lRc As Long
lPId = OpenProcess(PROCESS_QUERY_INFORMATION _
, False, Shell(ExeFileName, vbNormalFocus))
Do
GetExitCodeProcess lPId, lRc
Sleep 100
DoEvents
Loop While lRc = STILL_ACTIVE
MsgBox "Proceso finalizado"
Exit Sub
Err_Exec:
MsgBox "Fallo sometiendo proceso '" & ExeFile & "'." & String(2, vbCrLf) _
& "(" & Err.Number & ") " & Err.Description, vbCritical, "Ejecutar"
End Sub
Abur.
jhonilson
Nuevo Miembro
Mensajes: 11
Re: Procesos Paralelos
«
Respuesta #6 en:
Martes 11 de Enero de 2005, 17:01 »
0
Pues la manera mas sencilla de hacer lo que quieres es asi:
sub command1_click()
call command2_click()
ens sub
Con esto al presionar el boton 1 haces que se presione el 2.
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Procesos Paralelos
«
Respuesta #7 en:
Martes 11 de Enero de 2005, 17:40 »
0
Tronco, pero ¿has leido aunque sea por encima lo que necesita José...?
jhonilson
Nuevo Miembro
Mensajes: 11
Re: Procesos Paralelos
«
Respuesta #8 en:
Miércoles 12 de Enero de 2005, 20:57 »
0
Si en las operaciones incluidas en el command2 no hay variables que esten siendo utilizadas por el command1 no deberia de tener problemas.
ArKaNtOs
Miembro de PLATA
Mensajes: 1253
Nacionalidad:
Re: Procesos Paralelos
«
Respuesta #9 en:
Miércoles 12 de Enero de 2005, 21:14 »
0
Mira jhonilson a lo que se refiere el es a hacer dos cosas a la vez, en su caso es que mientras este haciendo un proceso largo pueda realizar otro, lee un poquito los mensajes plz, para que asi tus respuestas sirvan
solocodigo
el punto de encuentro de los programadores
VB
,
C
,
C++
,
.Net
,
Java
,
Delphi
,
Linux
,
Programacion de Videojuegos
,
ASM
,
Dudas Informaticas
.
Jose Arriagada
Miembro MUY activo
Mensajes: 373
Re: Procesos Paralelos
«
Respuesta #10 en:
Miércoles 12 de Enero de 2005, 22:26 »
0
Gracias por las todas las respuestas y dedicacion a estas.
Probando con el DoEvents, encontre una falla.
Si utilizan el siguiente codigo:
Private Sub Command1_Click()
Command1.Tag = 1
For a = 1 To 10000
DoEvents 'linea que te decia
List1.AddItem Format(Time, "hh:mm:ss")
If CDbl(Command1.Tag) = 0 Then
Exit For
End If
Next
End Sub
Private Sub Command2_Click()
MsgBox "hola"
End Sub
Private Sub Command3_Click()
Command1.Tag = 0
End Sub
Private Sub Form_Load()
Command1.Tag = 1
End Sub
Se daran cuenta que:
- Al presionar command1, se ejecuta la insercion de registros con la hora en list
- Al presionar command2, se muestra un mensaje, hasta aqui, todo ok.
- Pero si al presionar command2, esperamos unos segundos (10 aprox) y presionamos "Aceptar", el proceso que estaba haciendo command1, continua.
Y podran darse cuenta, que mientras se estaba esperando que se presione "Aceptar", el proceso command1 se detiene, y ellos simplemente revisando los registros de tiempo que se insertaron en el list, veran que existe en alguna parte entre un registro y otro un periodo de 10 seg aprox, y esto es producto de que estaba esperando "Aceptar"
La respuesta esta cerca, pero aun no he podido realizar procesos paralelos.
Gracias.
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Procesos Paralelos
«
Respuesta #11 en:
Jueves 13 de Enero de 2005, 09:16 »
0
Hola José.
Es normal que esto que comentas ocurra. Hay una sola hebra para realizar las acciones del bucle en command1 y el resto de eventos que generes, y mientras se hace una cosa, no se hace la otra.
Crea
otro ejecutable
que realice las acciones de command1, al usar shell en OpenProcess estarás usando una nueva hebra del procesador. Esto lo he utilizado en varios proyectos (casi siempre con procesos que copian gran cantidad de archivos, importan datos y cosas por el estilo) y funciona sin mayor problema.
Con lo que sí que te puedes encontrar es que te tengas que plantear el diseño de la aplicación de otra forma (así por las buenas no podrías mostrar los resultados de la ejecución del subproceso en un form del programa principal... tendrías que pensar en arreglar la situación mediante paso de parámetros, punteros, etc.).
A lo mejor realizar estos cambios te supone dar la vuelta a media aplicación y no estás dispuesto, pero vb cojea de las dos piernas en lo que se refiere a uso de threads.
Chao.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Procesos Paralelos