Thread ou novo Programa

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Thread ou novo Programa

Mensagem por rubens »

Bom dia...
Preciso criar um monitor para as nfce. Preciso que ele fique rodando e verificando se tem alguma nfce pendente ou em contingência para ser enviada.
Daí dei uma pesquisada sobre thread.. Eu poderia executar uma thread para fazer isso? Ela vai ser carregada como se fosse um outro programa independente? Se o programa que executou essa thread for fechado ela fecha também?

Quanto a fazer um programa pra isso, deveria fica na barra de tarefas? Seria melhor ficar independente do sistema padrão ?

Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Thread ou novo Programa

Mensagem por asimoes »

Rubens,

Você pode usar funções que esperam o término da execução da thread antes de sair do sistema

Por exemplo:

Código: Selecionar todos

PUBLIC nThread 
nThread:=hb_ThreadStart( HB_BITOR( HB_THREAD_INHERIT_PUBLIC, HB_THREAD_INHERIT_PRIVATE, HB_THREAD_INHERIT_MEMVARS ), @Processo()  )
...

Antes de sair do programa

Aguarda o término da thread antes de sair.

Código: Selecionar todos

DO WHILE .T.
   IF hb_ThreadWait( nThread, 0.1, .T. ) == 1 
      EXIT
   ENDIF
ENDDO
Quit
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Thread ou novo Programa

Mensagem por Toledo »

rubens escreveu:Eu poderia executar uma thread para fazer isso?
Sim, com certeza.
rubens escreveu:Ela vai ser carregada como se fosse um outro programa independente?
Ela vai ser executada junto com o programa que a criou, mas de forma independente.
rubens escreveu:Se o programa que executou essa thread for fechado ela fecha também?
Sim, se o programa que a criou for encerrado, ela também será encerrada.
rubens escreveu:Quanto a fazer um programa pra isso, deveria fica na barra de tarefas?
Dependendo do objetivo do programa, sim, acho que seria melhor.
rubens escreveu:Seria melhor ficar independente do sistema padrão ?
Acho que seria melhor, você poderia colocar o programa para ser executado junto com o Windows, assim o programa ficaria em execução enquanto o computador estiver ligado.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Thread ou novo Programa

Mensagem por JoséQuintas »

Só complementando o que o Toledo já colocou:

Imagine o seguinte:
O usuário sai fora do aplicativo, as threads são fechadas, e se tiver nota pendente... vai continuar pendente.

Ou...
O usuário abre o aplicativo, a thread verifica as notas.
O usuário abre o aplicativo em outra janela, serão duas threads verificando as notas, que podem se atrapalhar.

Já em programa separado, mais fácil de controlar.

Se deixar visível corre o risco do usuário fechar.
Por outro lado, se não ficar visível, o usuário não vai saber se está em execução.
Lembrando que pode até instalar isso como serviço no Windows, mas pode ficar sem mensagens de erro, por exemplo.

Lembrando também, que poderia existir a opção do servidor ficar processando, e não o terminal.

A questão é da parte operacional, antes da parte técnica.
A partir daí, a decisão é sua, sobre o que acha melhor.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Thread ou novo Programa

Mensagem por fladimir »

Acredito q seja melhor um programa a parte no servidor.

Vc pode fazer teu sistema qdo entra verificar se o programa monitor esta rodando, caso não esteja starta, caso esteja ok..

Ai o programa monitor fica monitorando se terá notas pendentes de transmissão e se encarrega do resto.

Agora uma preocupação q deverá existir será o seguinte ao meu ver, terá q ter tipo uma forma de não conflitar com possíveis emissões normais... explico:

Pelo q vejo vc utiliza o ACBrMonitorPlus q monitora determinada pasta etc...

Ai teu aplicativo pode ter 1 ou mais terminais emitindo NFCe, ou seja, gerando arquivos para o ACBr em determinada pasta

Então uma situação q vc tem q pensar é q pode ser q teu monitor de NFCe q estejam em contingência num mesmo momento tentará transmitir as NFCes pendentes e algum terminal pode estar gerando NFCe, então tem q pensar em pra isto, caso a forma q vc faça seja semelhante a q eu coloquei acima.

Se teu sistema de vendas roda tipo OFFLine independente da Retaguarda seria outra questão a se pensar tb se monitora por PDV ou no Servidor.

Eu acredito q mesmo q seja OFFLine tb, tipo tenha PDVs independentes a melhor forma é centralizar o processamento no Servidor, tipo após sincronizar os PDVs com o Servidor o monitor se encarrega do restante (desde q observada uma forma de evitar conflito na hora de emitir com emissões normais q podem concorrer com os envios das pendentes)

Desculpe se compliquei, mas se esta usando o ACBr tem q pensar tb nestas questões.

[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Thread ou novo Programa

Mensagem por asimoes »

Na minha opinião também concordo com um processo externo a aplicação.
Que pode ser feito com harbour puro ou harbpur + hmg ou harbour + hwgui, pode ser systray ou serviço windows, para manutenção evetual o ideal é systray, porque serviço tem que parar o serviço e pode dar merca...se não souber fazer ou se deixar o usuário fazer isso. Se o usuário fechar a execução no systray o máximo que pode acontecer e não fazer nada, rs.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Thread ou novo Programa

Mensagem por rubens »

No momento meu sistema só fecha venda em um local... Normalmente nao coloco o ACBR no servidor... Caso o ACBR congele o que é muito comum em Server 2008, as vezes é necessário reiniciar o pc nesse caso reiniciar um servidor onde tem uns 08 terminais fazendo venda e mais os pcs do administrativo é meio complicado... Então normalmente solicito do cliente uma máquina só para processar nfce... se houver disponibilidade outra para processar as nfe. Daí caso o tenha algum problema e tenha que resetar a máquina tá isolado.

Tenho um gerenciador de NFCe em minigui... de um programa que só emite nfce. Acho que vou partir dele para esse outro gerenciador robô... Só que o usuário tem que ter acesso a ele, porque com nfce tudo é possível.. éh cada erro 'desconhecido'... Não vou mudar o que já existe hoje... Só vou limitar mais o tempo na emissão de uma nfce... Em 10 segundos não obteve resposta.. entra em contigência... imprimir o danfe para o cliente e bola pra frente...

Daí esse gerenciador robô a cada período de tempo vai monitorar se existe alguma nfce em contigência, vai travar ela (para o caixa não tentar enviar manualmente naquele momento) e enviar.
No final do dia no fechamento do caixa se tiver cupons ainda não autorizados o caixa toma as devidas providências.

Em clientes que tem somente um pc funcionará basicamente da mesma forma. Nestes clientes hoje já não deixo fechar o caixa se tiver cupons abertos. Então o que o gerenciador robô não conseguir enviar o cliente vai ter que fazer manual.

Vou dar uma pesquisada de como colocar um programa para rodar no tray quando o pc iniciar...
Claro que se alguém já tiver alguma coisa nesse sentido, sinta-se a vontade para mostrar... ficarei muito grato...

Obrigado

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Thread ou novo Programa

Mensagem por asimoes »

Rubens,

Eu tenho um servidor de impressão feito em minigui você pode modificar para o seu uso, esse utilitário roda no systray.

Este utilitário usa a minigui com mingw
Anexos
PrintWin.zip
(2.2 MiB) Baixado 88 vezes
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Thread ou novo Programa

Mensagem por asimoes »

Link da minigui compilada com harbour fork 3.4 + mingw 6.1

http://hmgextended.com/files/CONTRIB/hmg1607-mingw.exe
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Thread ou novo Programa

Mensagem por Toledo »

rubens escreveu:Tenho um gerenciador de NFCe em minigui...
Então veja:

Systray...
C:\MiniGUI\SAMPLES\Advanced\CuckooClock\CuckoClock.prg
C:\MiniGUI\SAMPLES\Advanced\SysInfoTray\SysInfoTray.prg

Thread...
C:\MiniGUI\SAMPLES\Advanced\Downloader\download.prg
C:\MiniGUI\SAMPLES\BASIC\WAIT_WINDOW_2\demo2.prg

Executar com o Windows...
C:\MiniGUI\SAMPLES\Applications\TRAY_CALENDAR\TrayCalendar.prg
obs.: procure por WinRun()

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Thread ou novo Programa

Mensagem por asimoes »

Link da minigui compilada com harbour fork 3.4 + mingw 6.1

http://hmgextended.com/files/CONTRIB/hmg1607-mingw.exe

Para o zip que eu postei, é só criar uma pasta MiniguiMingw e descompactar o conteúdo do link acima.

Fica assim:

Código: Selecionar todos

MiniguiMingw
   hmg
   minigui
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder