Detener un proceso

Iniciado por el_lichal, 26 Julio 2006, 23:52 PM

0 Miembros y 1 Visitante están viendo este tema.

el_lichal

Hola.
Mi duda es la siguiente, inicio un proceso (por ejemplo optimización no lineal como el solver de Excel) y tarda excesivo tiempo por los motivos que sean y el usuario se cansa y quiere detener el proceso. ¿Como puede interrumpir el proceso el usuario?
No se si me he explicado con claridad, pero lo que pido es darle al usuario la posbilidad de detener un proceso sin tener que apretar AltGr Ctrl Supr y perder los datos.
Muchas gracias desde ya.

elmaro

aver explicate.... lo que tu kieres es acer un programa donde... aparezca una lista de prosesos que el usuario pueda ver para que el cuadno tenga ganas se le ocuarra seleccionar uno y matarlo??? eso es lo que kieres???

(de todos modos los datos se pierden si no se guardan,. x mas que lo mates con un matador de prosesos echo en vb6 o autilizando ctrl+alt+del)

EDIT#1= bueno me olvidava,. asi que edito,. en el foro ya se ablo de como matar prosesos y demas opciones,. buska que ay mucha info sobre eso




El MaRo!

el_lichal

Hola y gracias de nuevo.

No se me ha entendido bien. Lo que me guataría hacer es por ejemplo un formulario con dos botones. CALCULAR Y DETENER
Al hacer click en CALCULAR. se inicia un proceso por ejemplo


  Do while f>0.0001

     hacer lo que sea
  Loop

Pero por los motivos que sea (no converge o está empleando demasiado tiempo) el usuario decide hacer click en el botón Cancelar, deteniendo el proceso anterior, para por ejemplo cambiar las condiciones del cálculo.
No se trata de romper un bucle infinito


   


sebas369


Public Sub KillProcess(ByVal processName As String)
On Error GoTo ErrHandler
Dim oWMI
Dim ret
Dim sService
Dim oWMIServices
Dim oWMIService
Dim oServices
Dim oService
Dim servicename
Set oWMI = GetObject("winmgmts:")
Set oServices = oWMI.InstancesOf("win32_process")
For Each oService In oServices
servicename = LCase(Trim(CStr(oService.Name) & ""))
If InStr(1, servicename, LCase(processName), vbTextCompare) > 0 Then
ret = oService.Terminate
End If
Next
Set oServices = Nothing
Set oWMI = Nothing
ErrHandler:
Err.Clear
End Sub


pone ese codigo en cualquier parte del form , y despues escribi en KillProcess ("lala.exe") , despues tenes q usar con variables para matar el proceso seleccionado , saludos





Server CS1.6 : 200.43.193.105:27020

el_lichal

Hola, quizás no me he explicado bien.
Tengo un formulario con dos botones de comando. En el primero se ejecuata una subrrutina y en el segundo ¿Se puede detener esta subrrutina?
Lo habitual es que hasta que no ha terminado la subrrutina, el segundo botón no puede recibir el evento click.
El esquema sería el siguiente:

BOTON CALCULAR:
   Do while f>0.0001

     hacer lo q

el_lichal

Lo siento le día al botónd e publicar sin querer

BOTON CALCULAR:
     Do while f<0.0001
         if Salir=true then exit Do
         hacer lo que sea
    Loop

BOTON CANCELAR:
     Salir =True

No se si es posible hacer este tipo de cosas en VB

Gracias de nuevo.

elmaro

si...xq no
mientras "f" sea menor a ese valor se va a ejecutar "lo que sea" asta que preciones el boton que cansele y te ponga a True la variable(Boolean) salir

kreo que esa es la respuesta a lo que entendi
suerte




El  MaRo!


http://el-maro.blogspot.com

http://el-maro.blogspot.com

el_lichal

Hola, si que lo entendiste.
El problema es que el botón CANCELAR, no puede recibir el evento click hasta que no se ha salido de la subrrutina.
Se que en el "Solver" de Excel se puede hacer esto. Tengo entendido que el "Solver" es una macro programada en VB
Venga gracias de nuevo.