Cancelar proceso en curso

Post Reply
jfafive
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella

Cancelar proceso en curso

Post by jfafive »

Hola!

En mi apliación, hay una función que tarda un rato en finalizar el proceso. Por eso, le he puesto un MsgRun con un texto de 'APLICACION EN PROCESO'

Mi pregunta es,
¿si el ususario desea cancelar el proceso en cualquier momento, hay algún modo de harcelo?

Gracias, y un saludo.
:)
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Javier,

La función TerminateProcess() podría servir:

http://msdn.microsoft.com/en-us/library ... S.85).aspx
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Post by karinha »

Prueba con este ejemplo.

http://www.fivewin.com.br/exibedicas.asp?id=681

Saludos.
João Santos - São Paulo - Brasil
jfafive
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella

Post by jfafive »

Gracias, pero creo que no me he explicado bien.

No quiero eliminar un proceso .EXE como si nos fueramos al administrador de tareas.

Lo que quiero es interrumpir una función que está ejecutandose para salir de ella y así volver al menú principal de la aplicación, y no, interrumpir la aplicación en si.

Karina, en tu ejemplo, creo que killprocess, lo que hace es cerrar la aplicación exe que se está ejecutando, con lo cual no me sirve.

Antonio, en tu ejemplo, no lo tengo claro. Pues viene escrito en visual C. De modo que no sé como podría usar tu ejemplo. :cry:
User avatar
pymsoft
Posts: 383
Joined: Tue Oct 11, 2005 1:01 pm
Location: Savona - Italia
Contact:

Post by pymsoft »

jfafive:


yo hago lo siguiente:

me creo una funcion que me muestra la evolucion de lo que estoy haciendo.

Code: Select all

***************
STATIC FUNCTION BoxStatus()
***************
LOCAL aStru

//  IF EMPTY( aStatus )
    aStatus := ARRAY(7)
    aStatus[7] := .F. // lCancel
//  ENDIF

  aStru := {}
  AADD( aStru, { "TESTO"  , "C", 120, 0  } )
  DbCreate( "status.dbf", aStru )

  select 0
  USE status NEW ALIAS status exclusive

  DEFINE DIALOG aStatus[1] NAME "DLG_ACQ_VEN_STATUS"

    REDEFINE LISTBOX aStatus[2];
      FIELDS status->testo;
      HEADERS "";
      ALIAS "status";
      ID 101 OF aStatus[1]

    REDEFINE METER aStatus[3] VAR aStatus[6] ID 102 OF aStatus[1]

    REDEFINE SAY aStatus[4] PROMPT "" ID 103 OF aStatus[1]

    REDEFINE BUTTON aStatus[5] ID 501 ACTION ( aStatus[7]:=.T., aStatus[1]:end() )

  ACTIVATE DIALOG aStatus[1] CENTER NOWAIT;
           VALID (aStatus[3]:end(), status->( dbCloseArea() ), FERASE( "status.dbf" ), .T. )

RETURN NIL
*
** BoxStatus

y luego la llamo desde mi funcion, aqui te escribo una parte para que te hagas una idea:

Code: Select all

    BoxStatus()

    aStatus[3]:SetTotal( nCorr )

    // nCorr = totale articoli che corrispondono con il filtro.

    nSecIni := SECONDS()
    nSecTot := nCorr * 3 // facciamo 3 secondi per fare il calcolo per ogni articolo o taglia trovata

    DO WHILE art->( !eof() ) .AND. !aStatus[7]

      InfStat("Che corrispondono con il filtro: " + NTRIM( nTrovatiConFiltro )  + " Art. att. " + art->cod )

      status->( add_rec() )
      REPLACE status->testo WITH art->cod + " - " + art->des
      status->( dbUnLock() )

        aStatus[4]:varput( " Tempo residuo: " + TimeAsString( nSecTot ) )
        aStatus[4]:refresh()
        aStatus[2]:goBottom()
        aStatus[2]:refresh()
..
..
    ENDDO

Cuando !aStatus[7] es falso, me salgo de mi funcion.

Espero te sirva la idea.


Saludos
Pedro Gonzalez
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Javier,

Lo que te indica Pedro, es la forma de hacerlo:

Code: Select all

while lSigue
   ... haz lo que sea
end
si lSigue cambia a .F. entonces se sale del bucle.
regards, saludos

Antonio Linares
www.fivetechsoft.com
jfafive
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella

Post by jfafive »

Ok,

Gracias por vuestros consejos.
Lo voy a poner en práctica a ver como va.

:wink:
User avatar
Patricio Avalos Aguirre
Posts: 1028
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile
Contact:

Post by Patricio Avalos Aguirre »

Hola

Lo otro que puedes hacer es usar la funcion GetKeyState..


Code: Select all

do while Eval( bBusqueda )

	if GetKeyState( 27 )
		if  MsgYesNo( "¿Ha presionado la tecla ESC, desea salir?", "Usuario" )
		      exit
		endif
	endif

    bla..bla..cl

enddo
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Cancelar proceso en curso

Post by FranciscoA »

jfafive wrote:Hola!

En mi apliación, hay una función que tarda un rato en finalizar el proceso. Por eso, le he puesto un MsgRun con un texto de 'APLICACION EN PROCESO'

Mi pregunta es,
¿si el ususario desea cancelar el proceso en cualquier momento, hay algún modo de harcelo?

Gracias, y un saludo.
:)

Con la function MsgMeter() puedes hacerlo, ya que trae un botón "Cancel" que detiene el proceso. En source esta el codigo y lo puedes modificar a tus necesidades.

Saludos.
Post Reply