Page 1 of 1

TIMER

Posted: Wed Nov 15, 2006 6:52 am
by Mike Serra
Buenos días foro:

Tengo 1 máquina con dos sesiones abiertas de MS-DOS, en una de ellas ejecuto el programa que a continuación os propongo, en la otra sesión genero el fichero que necesita la primera sesión. Bueno, pues el timer se vuelve loco. Espero haberme explicado correctamente:


// This sample shows how to call a function in an interval time.
#include "FiveWin.ch"
static oWnd
/----------------------------------------------------------------------------//
function Main()
local oTmr
DEFINE WINDOW oWnd TITLE "Checking File"
DEFINE TIMER oTmr INTERVAL 1 ACTION CheckFile(oTmr) OF oWnd
ACTIVATE TIMER oTmr
ACTIVATE WINDOW oWnd ICONIZED

return nil

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

function CheckFile(oTmr)

if file ("c:\pruebras.txt")
oTmr:Deactivate
waitrun("apertura.exe") <--Este programa no tarda nada en ejecutarse
ferase("C:\pruebas.txt")
oTmr:Activate
endif
return nil



//Como podeis observar este programa lo único que hace es estar observando si existe un fichero en un sitio determinado, bueno pues cuando existe no para de ejecutar <apertura.exe>[/b]

Posted: Wed Nov 15, 2006 9:09 am
by Antonio Linares
Mike,

Prueba así:

Code: Select all

function CheckFile(oTmr) 

   static lFound := .f.

   if ! lFound .and. file ("c:\pruebras.txt") 
      lFound = .t.
      oTmr:Deactivate 
      waitrun("apertura.exe") <--Este programa no tarda nada en ejecutarse 
      ferase("C:\pruebas.txt") 
      oTmr:Activate 
      lFound = .f.
   endif 

return nil

Posted: Wed Nov 15, 2006 11:46 pm
by Mike Serra
Buenas noches Antonio:

Solo quería decirte que funcionó correctamente, lo que si te pediria, cuando tengas tiempo, me digas que diferencias existe entre crear lfound como local en el main y pasarselo por referencia a checkfile (este caso no funciona) y generarla como static dentro de checkfile

UN SALUDO y muchas gracias ante todo

Posted: Thu Nov 16, 2006 10:29 am
by Antonio Linares
Mike,

Al declararla static dentro de la función se reusa su valor para multiples llamadas.

Las variables locales se crean en la pila, y se crean y se destruyen para cada llamada, luego no puedes usarlas para ese propósito.