Jump to content
Fivewin Brasil

ALTERNATIVA A FUNÇÃO FILE()


HASA

Recommended Posts

:(

Boa tarde, colegas estou enfrentando um problema que não consigo resolver. Preciso que a função file() identifique assim que um arquivo.txt for gerado, estou usando:

DO WHILE !FILE( cArq )

   inkey(.5)

ENDDO

Vejo que o arquivo é gerado mas o sistema lê após NNNNNN segundos, isso em rede ok, em modo local beleza responde rapidamente, teriam alguma outra função ou dica para melhorar o desempenho?
8-| 
HASA

Link to comment
Share on other sites

Não sei se vai ajudar, mas segue uma alternativa a função File

** Acredito que o problema não seja a função em si mas a rede que está lenta... Vc já tentou fazer um teste em outra linguagem? Delphi por exemplo? Acredito que vai enfrentar o mesmo problema...

 

Function u_Teste()
Local cFile := "g:\result.txt"

MsgStop(MyFile(cFile))


Return

Static Function MyFile(cFile)
Return Len(Directory(cFile)) > 0

 

Link to comment
Share on other sites

 

Sem um TIMER Emotta?

Kapiaba, eu fiz a função alternativa a FILE... Agora basta ele aplicar isso a funcionalidade dele, no caso do exemplo dele bastaria ele substituir onde chamava a FILE para  MYFLE

Exemplo:

DO WHILE !MYFILE( cArq )

   inkey(.5)

ENDDO

 

Link to comment
Share on other sites

 

Srs. sem sucesso, hoje vou tentar alguma forma alternativa ( ainda não sei o que ) vou fazer vários testes se tiver sucesso, aviso ok.

HASA

Como eu disse, acredito que o problema não seja a linguagem e sim a REDE...
Entenda da seguinte forma, a linguagem pergunta ao sistema operacional de o arquivo existe. O sistema operacional pergunta a rede. Se a rede responde que não existe não tem o que a linguagem fazer.

 

Link to comment
Share on other sites

Hasa, não consigo fazer funcionar o exemplo do Viktor, o que está errado?

/*
 * HBDOC reader test
 *
 * Copyright 2010 Viktor Szakats (vszakats.net/harbour)
*/
	#include "directry.ch"
#include "simpleio.ch"
#include "FiveWin.ch"
	static oWnd
	function Main()
	   local oBar, cRoot
	   cRoot := cFILEPATH(GETMODULEFILENAME(GETINSTANCE()))
	   // cRoot := "C:\FWH1701\SAMPLES\"
	   // ? cRoot
	   DEFINE WINDOW oWnd TITLE "3D objects"
	   DEFINE BUTTONBAR oBar _3D OF oWnd
	   DEFINE BUTTON OF oBar ACTION FWHBDOC( cRoot )
	   SET MESSAGE OF oWnd TO "3D Objects" NOINSET CLOCK DATE KEYBOARD
	   ACTIVATE WINDOW oWnd
	return nil
	FUNCTION FWHBDOC( cRoot )
	   LOCAL aEntry
   LOCAL cName
   LOCAL aDir
   LOCAL cDir
   LOCAL aFile
   LOCAL tModified
   LOCAL aErrMsg
   LOCAL tmp
	   IF HB_ISSTRING( cRoot )
	      cDir := hb_DirSepAdd( cDir )
	   ELSE
	      /* Detect Harbour root */
	      cRoot := "." + hb_ps()
	      DO WHILE hb_vfDirExists( cRoot + ".." )
	         /*
         IF hb_vfExists( cRoot + "README.md" ) .AND. ;
               hb_vfExists( cRoot + "LICENSE.txt" ) .AND. ;
               hb_vfExists( cRoot + "config" )
         */
	         // hb_vfExists
         IF hb_vfExists( cRoot + "LICENSE.txt" )
	            EXIT
	         ENDIF
	         cRoot += ".." + hb_ps()
	      ENDDO
	   ENDIF
	   ? "Root:", cRoot
	   aDir := { cRoot }
	   FOR EACH aFile IN hb_vfDirectory( cRoot + "contrib" + hb_ps() + hb_osFileMask(), "D" )
      IF "D" $ aFile[ F_ATTR ] .AND. ;
            !( aFile[ F_NAME ] == "." .OR. aFile[ F_NAME ] == ".." )
         AAdd( aDir, cRoot + "contrib" + hb_ps() + aFile[ F_NAME ] )
      ENDIF
   NEXT
	   FOR EACH cDir IN aDir
	      IF ! Empty( tModified := __hbdoc_DirLastModified( cDir ) )
	         cName := DirGetName( cDir )
	         IF Empty( cName )
            cName := "harbour"
         ENDIF
	         aErrMsg := {}
	         aEntry := __hbdoc_LoadDir( cDir, cName, aErrMsg )
	         /* TODO: apply code formatting, HBDOC section and content validation here.
                  It's also possible to create output generators at this point.
                  These generators should simply parse the list of entry hashes
                  and spit out output in selected end-user format, like .html
                  or .pdf */
	         FOR EACH tmp IN aErrMsg
            ? [temp], tmp
         NEXT
	         IF ! Empty( aEntry )
            ? __hbdoc_SaveHBD( cName, aEntry ), cName, Len( aEntry ), tModified
         ENDIF
	      ENDIF
	   NEXT
	RETURN NIL
	STATIC FUNCTION DirGetName( cDir )
	   LOCAL cName := hb_FNameName( hb_DirSepDel( cDir ) )
	   IF cName == "" .OR. cName == "." .OR. cName == ".."
      RETURN ""
   ENDIF
	RETURN cName


 

Link to comment
Share on other sites

Entendi, mas só roda em Harbor.

/*
 * HBDOC reader test
 *
 * Copyright 2010 Viktor Szakats (vszakats.net/harbour)
*/
	#include "directry.ch"
#include "simpleio.ch"
#include "FiveWin.ch"
	static oWnd
	function Main()
	   local oBar, cRota
	   // cRota := "C:\FWH1701\SAMPLES\"
   cRota := cFILEPATH(GETMODULEFILENAME(GETINSTANCE()))
	   VER_TXT( cRota )
	return nil
	FUNCTION VER_TXT( cRota )
	   IF hb_vfExists( cRota + "LICENCA.TXT" )
	      ? [ACHEI O TXT - HARBOUR]
	   ELSE
	      ? [NAO ACHEI O TXT]
	   ENDIF
	RETURN NIL


 

Link to comment
Share on other sites

- Boa tarde, sai para visita, vamos lá, Srs. me perdoem mas sou um intruso na verdade hoje uso MINIGUI EXTEND + HARBOUR 3.2 + BCC55, porem as dicas quando são a nivel de Harbour e as vezes XHarbour a gente pode usar de boa tanto faz se é Minigui ou FiveWin, o Kapi já matou a função é assim mesmo, para vocês terem uma ideia o processamento melhorou em 50% ok, ou seja a resposta de 20 seg caiu para 10 seg. já é um bom ganho.

HASA

Link to comment
Share on other sites

 

Galera, boa tarde.

Se usar o "Do While" vai comer o processamento da máquina todo. Sugiro colocar um TIMER ao invés de deixar em um LOOP. Assim não consome recursos do PC.

 

Um abraço,

Alexandre Pereira

Alexandre, não vai comer processamento pq ele está colocando um INKEY antes do enddo

Eu invez do inkey costumo usar o ThreadSleep e como parametro passo qtos milisegundos eu quero deixar o programa "dormindo", exemplo, se eu quiser um descanso de 1 segundo eu coloco ThreadSleep(1000)

Então fica mais ou menos assim

DO WHILE !FILE( cArq )

   ThreadSleep(500) // parada de meio segundo

ENDDO

 

Desta maneira o processador não é sobrecarregado. Caso queira algo mais rapido colocando ThreadSleep(10) já é o suficiente pra não deixar o processo em 100%

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...