Página 1 de 1

Colocar programa em harhour ativo na memória

Enviado: 12 Nov 2021 17:33
por kovalsk
Tem alguma for de colocar um programa ou função do Harbou ativo na memória verificando em tempo real se um determinado arquivo apareceu na pasta?
Minha intenção seria o cliente ficar usando o programa em outras telas como cadastro de produtos ou clientes enquanto uma determinada rotina/função fica
verificando em tempo real se um arquivo texto apareceu na pasta, esse arquivo texto seria enviado por uma aplicativo feito por terceiros pra gerar o arquivo e
caso ele aparecesse eu faria a leitura e puxaria os dados pra arquivo e mandaria uma impressão pra impressora automaticamente.
Como não sei fazer um sistema pra android eu contrataria alguém pra isso.
Pensei nessa função também caso colocasse uma cancela com detecção de movimento onde a placa do carro seria capturada e enviada pra uma pasta para que
o programa fizesse a entrada desse veículo no sistema.
Trabalho praticamente com estacionamentos apenas e preciso desenvolver algo assim.
Continuo usando Harbour modo console.

Colocar programa em harhour ativo na memória

Enviado: 12 Nov 2021 18:15
por JoséQuintas
kovalsk escreveu:Continuo usando Harbour modo console.
Se adicionar na compilação -GUI ou GTWVG.HBC, deixa de ser console.

E se usar GTWVG pode criar um programa com tela invisível, e pode colocar no agendador de tarefas pra ele ficar rodando, ao invés de colocar num determinado módulo.

Também pode usar multithread, mas nesse caso, se existe mais de um terminal, todos os terminais iriam estar verificando.

Verifique no meu post recente de GTWVG pra principiantes, que lá tem o que precisa.

Colocar programa em harhour ativo na memória

Enviado: 12 Nov 2021 18:18
por Jairo Maia
Olá kovalsk,

No seu caso, não se trata de fechar o sistema, porém, apenas para teste para saber se em seu sistema essa função vai funcionar, coloque no início de seu aplicativo a dica desse post: https://pctoledo.org/forum/viewto ... 13#p152413

Se funcionar, seguimos a conversa e você pode fazer isso usando os recursos da HB_IdleAdd(). Caso não funcione, teria que alterar algo em seu sistema para que a HB_IdleAdd() seja "provacada" pela HB_IdleState(). De qualquer forma, acho que tem sim, sem "muitos" problemas.

Colocar programa em harhour ativo na memória

Enviado: 15 Nov 2021 17:44
por kovalsk
Obrigado a todos pela ajuda, obrigado José Quintas, Jairo....
Testei as quatro linha no início da minha aplicação e funcionou perfeito, quando para de mexer no teclado o sistema fecha automaticamente em 30 segundos.
Percebi numa mensagem de outro amigo que no ntask2 ele coloca a função que quer que seja executada no tempo marcado, é isso?

Colocar programa em harhour ativo na memória

Enviado: 15 Nov 2021 19:24
por JoséQuintas
kovalsk escreveu:Obrigado a todos pela ajuda, obrigado José Quintas, Jairo....
Testei as quatro linha no início da minha aplicação e funcionou perfeito, quando para de mexer no teclado o sistema fecha automaticamente em 30 segundos.
Acho isso pouco.
A pessoa atende o telefone e o programa fecha.
Deixo próximo de 15 minutos, que é o limite da rede windows.
Menos que isso pode ter reclamação.
Imagine o gerente analisando um gráfico, e/ou relatório, e o aplicativo se fechar durante a análise.
No celular ainda vai, apesar que tem horas que atrapalha o tempo reduzido.

Colocar programa em harhour ativo na memória

Enviado: 16 Nov 2021 00:31
por Jairo Maia
kovalsk escreveu:Percebi numa mensagem de outro amigo que no ntask2 ele coloca a função que quer que seja executada no tempo marcado, é isso?
Sim, mas naquele exemplo o raciocinio foi montado para encerrar o sistema.

Para esse caso de ler arquivo a cada determinado tempo, temos que pensar especificamente pra isso. Veja o exemplo abaixo:

Código: Selecionar todos

nTimeRead := 10  // tempo em segundos, para fazer a verificação
nTimeNextRead := Secs ( Time() ) + nTimeRead
nTask1 := HB_IdleAdd( {|| nTimeNextRead := If( Secs( Time() ) > nTimeNextRead, Secs( Time() ) + nTimeRead, nTimeNextRead ) } )
nTask2 := HB_IdleAdd( {|| If( Secs( Elaptime( nTimeNextRead, Time() ) ) >= nTimeNextRead, LerArquivo(), "" ) } )
Em sua função que fará a leitura do arquivo, precisa tratamento especial também, para evitar recursividade. Exemplo:

Código: Selecionar todos

Function LerArquivo()
 Local ..., ..., ...

 nTimeNextRead := Secs ( Time() ) + 1800  // ajuste a nTimeNextRead para o tempo que achar que ela ficará ativa, aqui, a exemplo, 30 minutos
 
 If File( "arquivo") 
  seus códigos para ler o arquivo...
  ....
  ....
  .... etc.
 EndIf

 nTimeNextRead := Secs ( Time() ) + nTimeRead  // antes de sair da função, reconfigure a variavel nTimeNextRead novamente

Return Nil
JoséQuintas escreveu:Acho isso pouco.
Sem dúvida José, mas 30 segundos foi apenas para exemplo. Não creio que alguém estabeleça esse tempo pra fechar um sistema.

Colocar programa em harhour ativo na memória

Enviado: 16 Nov 2021 12:06
por kovalsk
Jairo muito obrigado pela ajuda, vou colocar na minha aplicação. Agradeço pela riqueza de detalhes, da forma que fez está praticamente pronto, você entendeu exatamente do que preciso. Queria aproveitar pra perguntar pra você ou outro amigo do forum ou o José Quintas que mencionou que seria possível colocar o programa em execução na barra de tarefas sem tela, como fazer isso?
Aproveitando a boa vontade de todos eu compilo da forma como o José Quintas disse

-oSiac
-w0 -es2
-mt
#compilaçao Incremental
-inc
# comprime o executável (necessita de UPX)
-compr=yes
# COMPILAR EM MODO CONSOLE
xhb.hbc hbwin.hbc hbct.hbc -gui -gtwvt -ljck -gtwvg

Segundo sua palavras o sistema já não é modo console, eu conseguiria colocar o sistema pra abrir uma tela gráfica, digo, com cara de windows
Queria saber pra migrar os programas aos poucos, ainda tenho dificuldades pra trabalhar com IDE´s ou na munheca como alguns. Não sei qual forma deveria usar.
Desde já agradeço pela excelente colaboração.

Colocar programa em harhour ativo na memória

Enviado: 17 Nov 2021 12:28
por Jairo Maia
kovalsk escreveu:Queria aproveitar pra perguntar pra você ou outro amigo do forum ou o José Quintas que mencionou que seria possível colocar o programa em execução na barra de tarefas sem tela, como fazer isso?
Não sei fazer isso. Uma dúvida que tenho sobre isso, é que se colocar para rodar invisível (isso eu sei fazer), como o usuário vai saber que chegou a mensagem e tratá-la? Não tenho a menor ideia de como fazer dessa forma. Sugiro fazer aberto mesmo.
kovalsk escreveu:Segundo sua palavras o sistema já não é modo console, eu conseguiria colocar o sistema pra abrir uma tela gráfica, digo, com cara de windows
Queria saber pra migrar os programas aos poucos
Migrar o programa aos pucos esse é o macete na minha opinião. Uso GTWVG desde 2014, mas não tenho a menor idéia de como Auxiliar alguém a começar, a não ser dizendo: Faça uma cópia de qualquer pasta de algum projeto seu, estude os exemplos disponíveis da GTWVG na pasta do Harour, e tente ir implementando no projeto teste. Quando você menos esperar, verá que já conhece bastante de GTWVG para começar a implemtar em seus projetos que estão em produção.

Depois disso, dúvidas específicas se posso contribuir, sem problemas, contribuo se posso.

kovalsk. não leve a mal, de boa... Não peça o peixe, compre o anzol... rs...

Colocar programa em harhour ativo na memória

Enviado: 18 Nov 2021 10:00
por kovalsk
Bom dia, achei uma pasta gtwvg dentro da pasta harbour com alguns arquivos .prg e algumas imagens mas nada mais, sem testes e nem sei como compilar.
Alguns eu já tentei pela ide hmg 3.4.4 mas sem sucesso ou tentando com hmk2.
Você usa alguma ide ou faz tudo no punho mesmo?
Recebi um fonte de um amigo com tela gráfica e tentei de várias formas compilar mas sem sucesso.
OBS: O motivo de colocar o programa invisível é porque ele iria apenas verificar de 10 em 10 segundos se um arquivo chegou na pasta e se ele chegar ele vai ler o
arquivo texto e alimentar um banco de dados e mandar os dados pra impressora automaticamente. Por isso pedi a rotina que executasse de tempos em tempos. O
cliente não precisa fazer nada nesse caso.
Desde já agradeço.

Colocar programa em harhour ativo na memória

Enviado: 18 Nov 2021 10:09
por JoséQuintas
Já vi que na compilação tem gtwvg.
Pra não ter tela, é só não usar a tela.

Pra deixar como serviço, é usar o utilitário do Windows, SC.EXE, ou colocar no agendador de tarefas.

Não olhe os exemplos da gtwvg.
kovalsk escreveu:Alguns eu já tentei pela ide hmg 3.4.4 mas sem sucesso ou tentando com hmk2.
Aí pode sair do normal, porque se está num ambiente de HMG, ele é direcionado a HMG.

Colocar programa em harhour ativo na memória

Enviado: 18 Nov 2021 10:59
por Jairo Maia
JoséQuintas escreveu:Não olhe os exemplos da gtwvg.
Como o José disse, melhor é não misturar as coisas mesmo, e tentar resolver tudo com HMG apenas.

Mas apenas para esclarecer: Acho que o Harbour da HMG não vem com os exemplos da WVG, e nem tem porque. Mas a instalção do Harbour tem exemplos na pasta: C:\hb32\contrib\gtwvg\tests
kovalsk escreveu:Você usa alguma ide ou faz tudo no punho mesmo?
Tudo via digitação de código mesmo. Isso porque nunca me adaptei a nenhuma IDE, sei que ajudam, mas não me adapto.

Colocar programa em harhour ativo na memória

Enviado: 18 Nov 2021 12:37
por JoséQuintas
Jairo Maia escreveu:Como o José disse, melhor é não misturar as coisas mesmo, e tentar resolver tudo com HMG apenas.
Nem é por isso, é porque os exemplos só complicam.
Não uso NADA do que existe nos exemplos.
NADA mesmo.

Colocar programa em harhour ativo na memória

Enviado: 18 Nov 2021 14:02
por Jairo Maia
JoséQuintas escreveu:Nem é por isso, é porque os exemplos só complicam.
Ops... Aqui há um "abismo" entre minha compreensão e a sua. Respeito, mas não concordo! Tudo que sei referente a GTWVG aprendi com base nos exemplos disponíveis. E mais, acho que é o melhor caminho para quem quiser aprender WVG.