FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Se puede ejecutar un proceso en segundo plano?
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Se puede ejecutar un proceso en segundo plano?
Posted: Thu Apr 25, 2013 12:27 PM

Hola amigos,
tengo una pequeña aplicación que necesito que en determinado momento,
realice una actualización de un respaldo en una ftp una vez al día.

El tema es que mientras me está haciendo ese proceso, me inutiliza el sistema...
habrá alguna posibilidad de que esa parte del sistema se esté ejecutando en segundo plano?

Probé con tray y no me dio resultado, habrá alguna posibilidad de hacer algo?

Gracias!
Roberto

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Se puede ejecutar un proceso en segundo plano?
Posted: Thu Apr 25, 2013 02:28 PM

Puede ser que haya leído que se puede hacer con ventanas MDI que no estoy
usando hasta ahora en mi sistema.
La pregunta es, si tengo definida mi window principal con oWnd:TWindow():New(.......... etc etc)
como debo indicarle que es MDI?
Gracias

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Se puede ejecutar un proceso en segundo plano?
Posted: Thu Apr 25, 2013 02:42 PM

Roberto,

Cuanto tiempo tarda ese proceso ? Y en que consume el tiempo ? En enviar los datos por FTP ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: Se puede ejecutar un proceso en segundo plano?
Posted: Thu Apr 25, 2013 02:44 PM
Code (fw): Select all Collapse
// Working with MDI enviroments - \SAMPLES\TESTMDI.PRG

#include "FiveWin.ch"

static oWnd

//----------------------------------------------------------------------------//

function Main()

   local oWndEdit, oBar, oIcon, oImage
   local cName := "FiveWin power"

   DEFINE ICON oIcon RESOURCE "test" 

   DEFINE WINDOW oWnd FROM 1, 1 TO 20, 70 TITLE "I am the MDI Frame" ;
      MDI ;
      MENU BuildMenu() ; // COLOR "GR+*/RB" 
      ICON oIcon

   SET MESSAGE OF oWnd TO "Main Window"

   DEFINE WINDOW oWndEdit MDICHILD OF oWnd FROM 2, 2 TO 20, 50 ;
      TITLE "I am a MDI Child" COLOR "W+/R"

   @ 4, 2 GET cName OF oWndEdit SIZE 170, 25 COLOR "BG+/B"

   DEFINE BUTTONBAR oBar _3D OF oWndEdit

   DEFINE BUTTON OF oBar

   SET MESSAGE OF oWndEdit TO "Child Window"

   ACTIVATE WINDOW oWndEdit

   ACTIVATE WINDOW oWnd MAXIMIZED ;
      VALID MsgYesNo( "Want to End ?" )

return nil

//----------------------------------------------------------------------------//

function BuildMenu()

   local oMenu

   MENU oMenu
      MENUITEM "&Information"
      MENU
         MENUITEM "&About..." ACTION MsgAbout( "FiveWin", "FiveTech" )
         SEPARATOR
         MENUITEM "&End..." ACTION oWnd:End()
      ENDMENU

      MENUITEM "&Child Windows"
      MENU
         MENUITEM "&Tiled" ACTION oWnd:Tile()
         MENUITEM "&Cascade" ACTION oWnd:Cascade()
      ENDMENU
   ENDMENU

return oMenu

//----------------------------------------------------------------------------//

// Working with MDI enviroments

#include "FiveWin.ch"

static oWnd

function Main()

   local oWndEdit, oBar, oIcon, oImage
   local cName := "FiveWin power"

   oIcon := TIcon():New( ,, "test",, )

   oWnd := TMdiFrame():New( 1, 1, 20, 70, "I am the MDI Frame",, BuildMenu(),, oIcon,,,,,,,, )

   oWnd:oMsgBar := TMsgBar():New( oWnd, "Main Window", .F., .F., .F., .F.,,,,, .F., if( .F., .F., .F. ) )


   oWndEdit := TMdiChild():New( 2, 2, 20, 50, "I am a MDI Child",,, oWnd,, .F., "W+/R",,,, .F., .F.,,, !.F., !.F., !.F., !.F., )

   TGet():New( 4, 2, { | u | If( PCount()==0, cName, cName:= u ) }, oWndEdit, 170, 25,,, "BG+/B",,, .F.,, .F.,, .F.,, .F., .F.,, .F., .F., .F.,, .F.,,,,,,,, )

   oBar := TBar():New( oWndEdit,,, .T.,,, .F., .F. )

   TBtnBmp():NewBar(,,,,,, .F., oBar, .F.,,, .F.,,,,,,,,,,,,, .F. )

   oWndEdit:oMsgBar := TMsgBar():New( oWndEdit, "Child Window", .F., .F., .F., .F.,,,,, .F., if( .F., .F., .F. ) )

   oWndEdit:Activate(, oWndEdit:bLClicked, oWndEdit:bRClicked, oWndEdit:bMoved, oWndEdit:bResized, oWndEdit:bPainted, oWndEdit:bKeyDown, oWndEdit:bInit,,,,,,,,,,, oWndEdit:bLButtonUp )


   oWnd:Activate( Upper("MAXIMIZED"), oWnd:bLClicked, oWnd:bRClicked, oWnd:bMoved, oWnd:bResized, oWnd:bPainted, oWnd:bKeyDown, oWnd:bInit,,,,,,,,, {|| MsgYesNo( "Want to End ?" )},, oWnd:bLButtonUp )

return nil



function BuildMenu()

   local oMenu

   oMenu := MenuBegin( .F.,,, .F., .F. )
      MenuAddItem( "&Information",, .F.,,,,,,,,, .F.,,, .F. )
      MenuBegin( .F.,,, .F., .F. )
         MenuAddItem( "&About...",, .F.,, {|oMenuItem|MsgAbout( "FiveWin", "FiveTech" )},,,,,,, .F.,,, .F. )
         MenuAddItem()
         MenuAddItem( "&End...",, .F.,, {|oMenuItem|oWnd:End()},,,,,,, .F.,,, .F. )
      MenuEnd()

      MenuAddItem( "&Child Windows",, .F.,,,,,,,,, .F.,,, .F. )
      MenuBegin( .F.,,, .F., .F. )
         MenuAddItem( "&Tiled",, .F.,, {|oMenuItem|oWnd:Tile()},,,,,,, .F.,,, .F. )
         MenuAddItem( "&Cascade",, .F.,, {|oMenuItem|oWnd:Cascade()},,,,,,, .F.,,, .F. )
      MenuEnd()
   MenuEnd()

return oMenu


João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Se puede ejecutar un proceso en segundo plano?
Posted: Thu Apr 25, 2013 02:44 PM

En principio la solución más lógica sería usar ejecución multi-hilo.

Pero si puedes enviar pequeñas partes por FTP, y no enviar todo de una vez, podrias ir enviando esas pequeñas partes poco a poco.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Se puede ejecutar un proceso en segundo plano?
Posted: Thu Apr 25, 2013 06:33 PM

Roberto,

Se me ocurre que pudieras crear una aplicación para que haga el paso de los datos al FTP ( ej. app2) , independiente de la aplicación que tienes (app1) y, desde esa aplicación que ya tienes (app1) podrías ejecutar la app2 que se encargaría de pasar los datos al servidor FTP y cerrarse luego de realizar su función.

También pudiera ser que esta app independiente se ejecutara al iniciar el sistema y, en base a un timer, hiciera el paso de datos al FTP.

Digo, son ideas que quizás te puedan servir.

Lo del multi-hilo se que seguramente funcionaría pero no tengo la menor idea de como implementarlo.

Rolando :D

Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Se puede ejecutar un proceso en segundo plano?
Posted: Thu Apr 25, 2013 07:01 PM

Gracias por responderme.
Antonio, son respaldo de dbfs, algunas son de 5/10/hasta 20 mb, y por ahí demora unos 30 minutos.

Como sería trabajar con multihilo?

La opción de Rolando, también me gustó, sería para trabajar con ventanas MDI?
Un pequeño ejemplito? Porfi...

Muchas gracias a todos.
Roberto

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Se puede ejecutar un proceso en segundo plano?
Posted: Thu Apr 25, 2013 07:03 PM

Rolando, lo que me indicas, sería con dos EXES (ésto ya lo estaba haciendo, pero me quiero
evitar tener 2 exes) o hacerlo en la misma aplicación?
Roberto

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Se puede ejecutar un proceso en segundo plano?
Posted: Thu Apr 25, 2013 07:04 PM

Gracias Karinha,
voy a probar de armar algo con esto...

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Se puede ejecutar un proceso en segundo plano?
Posted: Thu Apr 25, 2013 10:13 PM

Roberto,

Que código usas para hacer el envio por FTP ?

Puedes mostrar el código ? gracias

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Se puede ejecutar un proceso en segundo plano?
Posted: Fri Apr 26, 2013 03:56 AM

TOTOVIOTTI

Si compilas con harbour, trabajar con multihilo es muy simple:

  1. agrega -mt en el archivo hbp
  2. cuando hagas el llamado a la función, en lugar de llamar miFuncion( x, y, z ), llamala así startThread( @miFuncion(), x, y, z )
  3. Compila, y ya tienes un programa en multihilo

Hay funciones especiales para algunos procesos pero sin contar el activar y desactivar mutex, no tengo idea de que hagan.

Si usas variables públicas, creo que no son visibles en los hilos, por lo menos, en mi caso, a difrencia de xHarbour, tuve que pasarlas como parámetros, ya que no se veían en los hilos.

El cambio con xHarbour es un poco mas complicado, porque incluye el cambiar varias librerias.

Saludos

Quique
Posts: 1074
Joined: Fri Oct 07, 2005 01:56 PM
Re: Se puede ejecutar un proceso en segundo plano?
Posted: Fri Apr 26, 2013 04:25 AM

Hola

y porque no hacer una aplicacion independiente y utilizar las tareas programadas

de esa manera lo hago yo para hacer respaldo en mi servidor ftp
dejando solamente los ultimos 7 dias de la semana, luego empieza a reemplazar los archivos

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

Continue the discussion