Cancelar proceso en curso
Cancelar proceso en curso
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.
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.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Javier,
La función TerminateProcess() podría servir:
http://msdn.microsoft.com/en-us/library ... S.85).aspx
La función TerminateProcess() podría servir:
http://msdn.microsoft.com/en-us/library ... S.85).aspx
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.
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.
jfafive:
yo hago lo siguiente:
me creo una funcion que me muestra la evolucion de lo que estoy haciendo.
y luego la llamo desde mi funcion, aqui te escribo una parte para que te hagas una idea:
Cuando !aStatus[7] es falso, me salgo de mi funcion.
Espero te sirva la idea.
Saludos
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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Javier,
Lo que te indica Pedro, es la forma de hacerlo:
si lSigue cambia a .F. entonces se sale del bucle.
Lo que te indica Pedro, es la forma de hacerlo:
Code: Select all
while lSigue
... haz lo que sea
end
- Patricio Avalos Aguirre
- Posts: 1028
- Joined: Fri Oct 07, 2005 1:56 pm
- Location: La Serena, Chile
- Contact:
Hola
Lo otro que puedes hacer es usar la funcion GetKeyState..
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
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
- FranciscoA
- Posts: 1964
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Cancelar proceso en curso
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.