kapiaba Posted August 17, 2018 Report Share Posted August 17, 2018 http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=18419 http://forums.fivetechsupport.com/viewtopic.php?f=3&t=12053&start=0 Quote Link to comment Share on other sites More sharing options...
alex2002 Posted August 17, 2018 Report Share Posted August 17, 2018 Emotta, aí sim, usando o ThreadSleep diminui o processamento (fica quase igual ao timer ou melhor), mas se usar inkey pode esperar a máquina apitar na curva. João, estamos aí, não "Couve" nada, apenas uma dedicação em tempo mais que integral a um cliente, mas agora estamos na ativa novamente. Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted August 17, 2018 Report Share Posted August 17, 2018 Esse temporizador ajuda? WaitPeriod(100) DO WHILE WaitPeriod() <do something> ENDDO Quote Link to comment Share on other sites More sharing options...
HASA Posted August 17, 2018 Author Report Share Posted August 17, 2018 Kapi, essa função aFindFiles() será que tem como posta-la para tentar compilar com o harbour ? HASA Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 17, 2018 Report Share Posted August 17, 2018 Kapi, essa função aFindFiles() será que tem como posta-la para tentar compilar com o harbour ? HASA Mira aki: http://forums.fivetechsupport.com/viewtopic.php?f=6&t=27015&start=0 Quote Link to comment Share on other sites More sharing options...
HASA Posted August 17, 2018 Author Report Share Posted August 17, 2018 Se entendi, a função Directory() do xHarbour e melhor que do Harbour, ou mais leve. HASA Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted August 19, 2018 Report Share Posted August 19, 2018 Hasa Boa tarde Vc que usa o ACBR, pode utilizar este comando, para este caso que vc não está confiando na Fun~ção da ferramenta. NFe.FileExists(cNomeArq) Verifica se o arquivo passado através do parâmetro cNomeArq existe na máquina em que o ACBrNFeMonitor está instalado. Útil para quem utiliza comunicação via Sockets e deseja verificar a existência de um arquivo na máquina que está instalado o ACBrNFeMonitor sem precisar mapear a unidade de rede. Parâmetro: cNomeArq - Nome do Arquivo Exemplo: NFe.FileExists("NFe01.xml") []s, Quote Link to comment Share on other sites More sharing options...
HASA Posted August 20, 2018 Author Report Share Posted August 20, 2018 Hummm, obrigado mas... ainda não é isso, na verdade preciso saber que o arquivo de retorno do acbr já está na pasta assim que o acbr libera, pois o sistema fica bobolhando e 45 segundos depois ele percebe que o arquivo está lá a "HORAS". HASA Quote Link to comment Share on other sites More sharing options...
giovanyvecchi Posted August 20, 2018 Report Share Posted August 20, 2018 Tenta assim: Do While PathFileExists("c:\blabla\qqfoi.txt") = 0 SysWait(.3) EndDo DLL32 FUNCTION PathFileExists(cPathFileName AS STRING) AS LONG PASCAL ; FROM "PathFileExistsA" LIB "shlwapi.dll" Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 20, 2018 Report Share Posted August 20, 2018 Very good giovany. #Include "FiveWin.ch" Function Main() Ver_Txt() Return Nil FUNCTION Ver_Txt() While PathFileExists( "C:\TESTE\LICENCA.TXT" ) = 0 // se nao existir SYSREFRESH() SysWait(.3) IF File( "C:\TESTE\LICENCA.TXT" ) // nada a fazer ELSE ? "Nao Achou" EXIT ENDIF EndDo RETURN NIL DLL32 FUNCTION PathFileExists(cPathFileName AS STRING) AS LONG PASCAL ; FROM "PathFileExistsA" LIB "shlwapi.dll" Quote Link to comment Share on other sites More sharing options...
HASA Posted August 20, 2018 Author Report Share Posted August 20, 2018 Srs. com a função acima o sistema "enxerga" com 22seg. com a função hb_FileExists() do Harbour 3.2 10seg. Obrigado mesmo assim, mas... fechei com a hb_FileExists(). HASA kapiaba 1 Quote Link to comment Share on other sites More sharing options...
giovanyvecchi Posted August 20, 2018 Report Share Posted August 20, 2018 Eu acho que o melhor não é ver se o arquivo esta na pasta, logo porque o sistema windows pode demorar um pouquinho para disponibilizar o arquivo em lista. Vai direto no assunto, Acesse o arquivo diretamente e ja verifique se o acbr liberou ele. Local nHandleFile, lOpenFile := .F., nQtaTentativas := 0 DO WHILE .T. nHandleFile := Fopen("C:\PASTA\ARQUIVO.TXT",16) //FO_EXCLUSIVE If nHandleFile == -1 nQtaTentativas ++ hb_idleSleep( 0.2 ) SysRefresh() else lOpenFile := .T. Exit EndIf If nQtaTentativas > 50 // 50 x .2 = 10 Segundos Exit EndIf ENDDO IF !lOpenFile ? "ERRO" ELSE fClose(nHandleFile) // fecha o arquivo se quiser ENDIF Quote Link to comment Share on other sites More sharing options...
HASA Posted August 21, 2018 Author Report Share Posted August 21, 2018 Bom dia, apenas documentando a função acima do Giovany teve o mesmo tempo de execução da função hb_FileExists() do Harbour 10seg. HASA kapiaba 1 Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted August 21, 2018 Report Share Posted August 21, 2018 Pessoal, Tenho uma dúvida e uma sugestão. Sugestão: Estive lendo este artigo (Vide link abaixo) e me parece uma situação muito boa para ganhar tempo de I/O. Antes a gente usava discos virtuais para gravação de pequenos arquivos, como são os casos dos arquivos TXT de envio e retorno do ACBR, sendo que o de envio é eliminando automaticamente, liberando espaço e o de retorno com tratamento pelo usuário pelo sistema. Com isso, acredito que o ganho do processo de I/O, seja substancial, tendo em vista o arquivo estar sendo gravado em mémória. https://www.tecmundo.com.br/windows-7/3210-dicas-do-windows-7-adicione-um-novo-disco-virtual-ao-computador.htm Dúvida: Essa DLL "shlwapi". É de origem do windows? A sua chamada pode ser feito em qualquer ferramenta? O pq da minha questão. Tentei reproduzir trecho do post do Giovany, e não compila com o Xharbour por falta da função. Syntax error: "syntax error at 'FUNCTION'" []s, Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 21, 2018 Report Share Posted August 21, 2018 Pasta de C:\Windows\System32 0/11/2010 09:21 350.208 shlwapi.dll 1 arquivo(s) 350.208 bytes Funciona perfeito com FiveWin for xHarbour, Quote Link to comment Share on other sites More sharing options...
oribeiro Posted September 5, 2018 Report Share Posted September 5, 2018 Essa função ajuda o usuário a ver que o sistema está trabalhando, esperando o arquivo ser disponibilizado. Execute assim: cFile := "arquivo a ser encontrado" MsgWait1( "Aguarde o retorno do arquvo"+cFile, "Aguarde o retorno", 30, .F., {||File( cFile )} ) ******************************************************************************************* Function MsgWait1( cCaption, cTitle, nSeconds, lBot, bAction ) // MsgWait com "botão" de sair e "função" -> Exemplo: MsgWait1("cCaption", "cTitle", 5, .T., {||File("xxx.txt")} ) // o code block deve retornar (.T.) ******************************************************************************************* LOCAL oDlg, oProg1, oSay, oBtn, bOk, nInicio:=0 cCaption := iif(ValType(cCaption)#"C", "Por favor, aguarde...", cCaption) // Mensagem para a janela cTitle := iif(ValType(cTitle )#"C", "(OASyS) Mensagem com espera programada.", cTitle ) // Título para a janela nSeconds := iif(ValType(nSeconds)#"N", 5, nSeconds) // Quantos segundos a janela ficará aberta lBot := iif(ValType(lBot )#"L", .F., lBot ) // O Botão de Fechar será liberado? Se informado um Code Block será será oculto. bAction := iif(ValType(bAction )#"B", "", bAction ) // Code Block a ser executado. Exemplos: {|| Funcao() } ou {|| File("ent.txt") } // A ação deve sempre retornar (.T.) no fim da execução PRIVATE n := 0 PRIVATE lBtn := .F. PRIVATE lAction := ValType(bAction)="B" PRIVATE lRet := iif(lAction, .F., .T.) DEFINE DIALOG oDlg SIZE 400,300 COLOR CLR_BLUE,CLR_HGRAY FONT oFontGet TITLE cTitle STYLE DS_MODALFRAME PIXEL @ 001,001 GROUP TO 109,199 FONT oFontSay TRANSPARENT PIXEL @ 110,001 GROUP TO 138,199 FONT oFontSay TRANSPARENT PIXEL @ 120,008 METER oProg1 VAR nInicio TOTAL nSeconds NOPERCENTAGE SIZE 145,011 PIXEL @ 120,159 BUTTON oBtn PROMPT "&Fechar" SIZE 35,12.5 ACTION (lBtn:=.T., n:=nSeconds) WHEN lBot PIXEL CANCEL @ 010,008 SAY oSay PROMPT cCaption SIZE 189,092 COLOR CLR_RED,CLR_HGRAY PIXEL oBtn:cToolTip:="Atenção: Se você fechar essa tela eu não vou conseguir executar a tarefa e algo pode sair errado." ACTIVATE DIALOG oDlg CENTER ON INIT oDlg:bStart:={|| Increase(oDlg, oProg1, nSeconds, bAction) } Return( lRet ) Static Function Increase(oDlg, oProg1, nSeconds, bAction) oDlg:Refresh() For n=0 To nSeconds oProg1:Set( n ) oProg1:cText := "Essa tela fechará em "+Alltrim(Str(nSeconds - n))+" segundos." if lAction // Se houver um code block a ser executado: if Eval( bAction ) // - Verifica se a tarefa foi executada. lRet := .T. Exit elseif n=nSeconds // - Recomeça a contagem caso não tenha executado a tarefa ainda.. if lBtn .AND. !MsgYesNo("Eu ainda não consegui terminar a tarefa que fui programado para executar, devo continuar até a conclusão?","(OASyS) Estou tentando executar uma tarefa importante.") Exit endif lBtn := .F. n := 0 oProg1:Set( n ) oProg1:cText := "Essa tela fechará em "+Alltrim(Str(nSeconds))+" segundos." SysRefresh() endif endif WaitSeconds( 1 ) Next oDlg:End() Return nil Quote Link to comment Share on other sites More sharing options...
kapiaba Posted September 5, 2018 Report Share Posted September 5, 2018 Oscar, esse baguy() não espera nada. Desliga o dialogo de imediato. Reveja. #include "FiveWin.ch" Function Main() LOCAL cFile cFile := "C:\TESTE\TESTE.TXT" MsgWait1( "Aguarde o retorno do arquvo"+cFile, "Aguarde o retorno", 30, .F., {||File( cFile )} ) Return nil ******************************************************************************************* Function MsgWait1( cCaption, cTitle, nSeconds, lBot, bAction ) // MsgWait com "botão" de sair e "função" -> Exemplo: MsgWait1("cCaption", "cTitle", 5, .T., {||File("xxx.txt")} ) // o code block deve retornar (.T.) ******************************************************************************************* LOCAL oDlg, oProg1, oSay, oBtn, bOk, nInicio:=0, oFontGet, oFontSay cCaption := iif(ValType(cCaption)#"C", "Por favor, aguarde...", cCaption) // Mensagem para a janela cTitle := iif(ValType(cTitle )#"C", "(OASyS) Mensagem com espera programada.", cTitle ) // Título para a janela nSeconds := iif(ValType(nSeconds)#"N", 5, nSeconds) // Quantos segundos a janela ficará aberta lBot := iif(ValType(lBot )#"L", .F., lBot ) // O Botão de Fechar será liberado? Se informado um Code Block será será oculto. bAction := iif(ValType(bAction )#"B", "", bAction ) // Code Block a ser executado. Exemplos: {|| Funcao() } ou {|| File("ent.txt") } // A ação deve sempre retornar (.T.) no fim da execução PRIVATE n := 0 PRIVATE lBtn := .F. PRIVATE lAction := ValType(bAction)="B" PRIVATE lRet := iif(lAction, .F., .T.) DEFINE FONT oFontGet NAME "Ms Sans Serif" SIZE 00, -14 BOLD DEFINE FONT oFontSay NAME "Ms Sans Serif" SIZE 00, -12 BOLD DEFINE DIALOG oDlg SIZE 400,300 COLOR CLR_BLUE,CLR_HGRAY FONT oFontGet TITLE cTitle STYLE DS_MODALFRAME PIXEL @ 001,001 GROUP TO 109,199 FONT oFontSay TRANSPARENT PIXEL @ 110,001 GROUP TO 138,199 FONT oFontSay TRANSPARENT PIXEL @ 120,008 METER oProg1 VAR nInicio TOTAL nSeconds NOPERCENTAGE SIZE 145,011 PIXEL @ 120,159 BUTTON oBtn PROMPT "&Fechar" SIZE 35,12.5 ACTION (lBtn:=.T., n:=nSeconds) WHEN lBot PIXEL CANCEL @ 010,008 SAY oSay PROMPT cCaption SIZE 189,092 COLOR CLR_RED,CLR_HGRAY PIXEL oBtn:cToolTip:="Atenção: Se você fechar essa tela eu não vou conseguir executar a tarefa e algo pode sair errado." ACTIVATE DIALOG oDlg CENTER ON INIT oDlg:bStart:={|| Increase(oDlg, oProg1, nSeconds, bAction) } oFontGet:End() oFontSay:End() Return( lRet ) Static Function Increase(oDlg, oProg1, nSeconds, bAction) oDlg:Refresh() For n=0 To nSeconds oProg1:Set( n ) oProg1:cText := "Essa tela fechará em "+Alltrim(Str(nSeconds - n))+" segundos." if lAction // Se houver um code block a ser executado: if Eval( bAction ) // - Verifica se a tarefa foi executada. lRet := .T. Exit elseif n=nSeconds // - Recomeça a contagem caso não tenha executado a tarefa ainda.. if lBtn .AND. !MsgYesNo("Eu ainda não consegui terminar a tarefa que fui programado para executar, devo continuar até a conclusão?","(OASyS) Estou tentando executar uma tarefa importante.") Exit endif lBtn := .F. n := 0 oProg1:Set( n ) oProg1:cText := "Essa tela fechará em "+Alltrim(Str(nSeconds))+" segundos." SysRefresh() endif endif WaitSeconds( 1 ) Next oDlg:End() // desliga direto em nao espera. Return nil Quote Link to comment Share on other sites More sharing options...
oribeiro Posted September 5, 2018 Report Share Posted September 5, 2018 Você verificou se o arquivo já estava na pasta? Se ele já tiver lá, então o sistema não esperará. - Apague o arquivo, execute a função e só depois crie ele. cFile := "C:\TESTE\TESTE.TXT" Quote Link to comment Share on other sites More sharing options...
kapiaba Posted September 5, 2018 Report Share Posted September 5, 2018 Entendi, "pobrema": se o arquivo não for criado e o uçuário der <ESC>, o programa fica preso. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted September 5, 2018 Report Share Posted September 5, 2018 Dei uma melhorada na função. Execute assim para permitir que o usuário abandone a função caso não houver retorno do arquivo: MsgWait1( "Aguarde o retorno do arquvo"+cFile, "Aguarde o retorno", 30, .T., {||File( cFile )} ) Se o usuário não puder cancelar e deve esperar até o arquivo aparecer na pasta, então faça assim: MsgWait1( "Aguarde o retorno do arquvo"+cFile, "Aguarde o retorno", 30, .F., {||File( cFile )} ) A diferença está no quarto parâmetro .T. ou .F. O legal dessa função é que mostra para o usuário que o sistema não está travado. É o que eu queria fazer com o MSGRUN() Confira. ******************************************************************************************* Function MsgWait1( cCaption, cTitle, nSeconds, lBot, bAction ) // MsgWait com "botão" de sair e "função" -> Exemplo: MsgWait1("cCaption", "cTitle", 5, .T., {||File("xxx.txt")} ) // o code block deve retornar (.T.) ******************************************************************************************* LOCAL oDlg, oProg1, oSay, oBtn, bOk, nInicio:=0 cCaption := iif(ValType(cCaption)#"C", "Por favor, aguarde...", cCaption) // Mensagem para a janela cTitle := iif(ValType(cTitle )#"C", "(OASyS) Mensagem com espera programada.", cTitle ) // Título para a janela nSeconds := iif(ValType(nSeconds)#"N", 5, nSeconds) // Quantos segundos a janela ficará aberta lBot := iif(ValType(lBot )#"L", .F., lBot ) // O Botão de Fechar será liberado? Se informado um Code Block será será oculto. bAction := iif(ValType(bAction )#"B", "", bAction ) // Code Block a ser executado. Exemplos: {|| Funcao() } ou {|| File("ent.txt") } // A ação deve sempre retornar (.T.) no fim da execução PRIVATE n := 0 PRIVATE lBtn := .F. PRIVATE lAction := ValType(bAction)="B" PRIVATE lRet := iif(lAction, .F., .T.) DEFINE DIALOG oDlg SIZE 400,300 COLOR CLR_BLUE,CLR_HGRAY FONT oFontGet TITLE cTitle STYLE DS_MODALFRAME PIXEL @ 001,001 GROUP TO 109,199 FONT oFontSay TRANSPARENT PIXEL @ 110,001 GROUP TO 138,199 FONT oFontSay TRANSPARENT PIXEL @ 120,008 METER oProg1 VAR nInicio TOTAL nSeconds NOPERCENTAGE SIZE 145,011 PIXEL @ 120,159 BUTTON oBtn PROMPT "&Fechar" SIZE 35,12.5 ACTION lBtn:=.T. WHEN lBot PIXEL CANCEL @ 010,008 SAY oSay PROMPT cCaption SIZE 189,092 COLOR CLR_RED,CLR_HGRAY PIXEL oBtn:cToolTip:="Atenção: Se você fechar essa tela eu não vou conseguir executar a tarefa e algo pode sair errado." ACTIVATE DIALOG oDlg CENTER ON INIT oDlg:bStart:={|| Increase(oDlg, oProg1, nSeconds, bAction) } Return( lRet ) Static Function Increase(oDlg, oProg1, nSeconds, bAction) oDlg:Refresh() oProg1:Set(0) oProg1:cText := "Essa tela fechará em "+Alltrim(Str(nSeconds))+" segundos." SysRefresh() For n=0 To nSeconds oProg1:Set( n ) oProg1:cText := "Essa tela fechará em "+Alltrim(Str(nSeconds - n))+" segundos." if lAction // Se houver um code block a ser executado: if Eval( bAction ) // - Verifica se a tarefa foi executada. lRet := .T. Exit elseif lBtn .OR. n=nSeconds // - Recomeça a contagem caso não tenha executado a tarefa ainda.. if lBtn .AND. !MsgYesNo("Eu ainda não consegui terminar a tarefa que fui programado para executar, devo continuar até a conclusão?","(OASyS) Estou tentando executar uma tarefa importante.") Exit endif lBtn := .F. n := 0 oProg1:Set( n ) oProg1:cText := "Essa tela fechará em "+Alltrim(Str(nSeconds))+" segundos." endif endif if lBtn Exit endif WaitSeconds( 1 ) SysRefresh() Next oDlg:End() Return nil kapiaba 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.