Fechar o Sistema Automático

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Josmar dos Santos
Usuário Nível 3
Usuário Nível 3
Mensagens: 277
Registrado em: 11 Jan 2006 18:36
Localização: Botucatu-SP

Fechar o Sistema Automático

Mensagem por Josmar dos Santos »

Alguém conhece alguma rotina para sair do sitema automático em determinado tempo ?

Peço isso porque alguns usuários saem do seus micros para fazerem alguma coisa externa e abondonam o sistema aberto ficando totalmente vunerável !

:xau

Josmar
sambomb
Usuário Nível 3
Usuário Nível 3
Mensagens: 250
Registrado em: 24 Out 2008 17:02
Localização: Itaocara - RJ - Brasil

Re: Fechar o Sistema Automático

Mensagem por sambomb »

use o comando Quit, ou ensine os usuários a usarem a proteção de tela do windows, que pode ser configurada para requisitar a senha para voltar a usar
Imagem

Rca Sistemas - Itaocara - RJ
Josmar dos Santos
Usuário Nível 3
Usuário Nível 3
Mensagens: 277
Registrado em: 11 Jan 2006 18:36
Localização: Botucatu-SP

Re: Fechar o Sistema Automático

Mensagem por Josmar dos Santos »

Boa tarde sambomb, é aí q o bicho pega ! ensinar usuário a respeitar o sistema. A única coisa q a maioria quer é facilidade e bombardear os bancos de dados com um monte de informações descecessárias. Espero que os outros colegas tenham mais sorte do que eu ..

Josmar
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Fechar o Sistema Automático

Mensagem por Maligno »

A melhor forma de resolver esse tipo de problema, a meu ver, é implementar uma função que substitua a velha InKey(), e que contenha código de contagem de tempo, resetável a cada pressionar de tecla. Bastaria, nesse caso, configurar um tempo máximo de inatividade. Alcançado tal limite, quit. Até rimou. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Fechar o Sistema Automático

Mensagem por Pablo César »

Já foi abordado outras vezes este assunto. Pode ser usado o KEYSEC da CT.LIB em combinação com o INKEY(nTempo) do GETSYS.PRG e outra solução como o de usar BGEVENTS. Você pode conseguir mais detalhes neste tópico: https://pctoledo.org/forum/viewto ... f=1&t=8125
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Re: Fechar o Sistema Automático

Mensagem por JoséQuintas »

Aqui alterei para caso o usuário deixar o sistema parado, a CPU ficar totalmente livre, e se ultrapassar um certo limite de tempo, o sistema vai se fechando.
Pra isso é necessário alterar todos os pontos que usam Inkey(0), e alguns que usam Inkey().
Será mais fácil se tiver rotinas para menus, por exemplo.
E com certeza, uma mexida na GETSYS, na parte do Inkey(0).
Até que o limite de tempo não precisa nada tão extraordinário:

A parte alterada da GetSys:

Código: Selecionar todos

       // Apply keystrokes until exit
        WHILE ( oGet:exitState == GE_NOEXIT )
           nKey := MyInkey(600,.f.) // Mouse
           nKey := iif(nKey==0,27,nKey)
*           nKey := WaitKey()
           GetApplyKey( oGet, nKey, lIsMouse)
        ENDDO
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/
Josmar dos Santos
Usuário Nível 3
Usuário Nível 3
Mensagens: 277
Registrado em: 11 Jan 2006 18:36
Localização: Botucatu-SP

Fechar o Sistema Automático

Mensagem por Josmar dos Santos »

Boa tarde. Essa função FT_Ontick() consegue mesmo fazer com que o programa após n tempo de ociosidade saía sem o usuário dar o comando? Achei essa função e gostaria que alguém aqui do fórum me ajudasse a entender ela e implementar no meu sistema..

Código: Selecionar todos

 THREAD STATIC t_bOnTick
THREAD STATIC t_nTickInterval := 0
THREAD STATIC t_nLastCheck := 0
THREAD STATIC t_hIdle
	 
STATIC PROCEDURE __ft_OnTick()
	 
IF hb_MilliSeconds() >= ( t_nLastCheck + t_nTickInterval )
   t_nLastCheck := hb_MilliSeconds()
   Eval( t_bOnTick )
ENDIF
RETURN
	 
PROCEDURE ft_OnTick( bOnTick, nTckInterval ) 
	 	   
IF HB_ISEVALITEM( bOnTick )
   t_bOnTick := bOnTick
   IF HB_ISNUMERIC( nTickInterval )
      t_nTickInterval := ( 1 / 18.20648 ) * nTickInterval * 1000
   ENDIF
t_nLastCheck := hb_MilliSeconds()
   IF Empty( t_hIdle )
      t_hIdle := hb_idleAdd( {|| __ft_OnTick() } )
   ENDIF
ELSE
t_bOnTick := NIL
  t_nTickInterval := 0
  IF ! Empty( t_hIdle )
     hb_idleDel( t_hIdle )
     t_hIdle := NIL
  ENDIF
ENDIF
RETURN   
Josmar
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Fechar o Sistema Automático

Mensagem por rochinha »

Amiguinhos,

Josmar dos Santos,
A biblioteca BGEvents() proporciona algo parecido com os THreads do Harbour. Com as funções da BGEvents() voce consegue colocar vários trabalhos sendo feitos ao mesmo tempo em seu sistema sem interromper o processo normal. O problema é que se algum destes processor gerar um GPF, vai tudo pro espaço.

O Harbour conseguiu simular muitas funções existentes no mundo Clipper de forma que a transição fosse a menos árdua possível.

Não sei qual biblioteca no Clipper possuia funcções iniciadas com FT_???(acho que a NANFOR.LIB) mas seria possível o uso delas desde que saiba a sintaxe.

O trecho que voce mostra acima, parece fazer parte do Harbour e adaptá-lo para uso no Clipper seria um tanto impossível.

No tempo que usava Clipper, meu sistema tinha screen-saver e lembro de ter usado umas bibliotecas que tinha uns da hora.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Josmar dos Santos
Usuário Nível 3
Usuário Nível 3
Mensagens: 277
Registrado em: 11 Jan 2006 18:36
Localização: Botucatu-SP

Fechar o Sistema Automático

Mensagem por Josmar dos Santos »

Bom dia Rochinha. Na verdade eu quis usar esse tópico antigo para não ficar gerando muita duplicidade. O meu sistema já está migrado para Harbour e estou querendo usar essa função em Harbour. Vc sugere que continuamos nesse tópico ou eu crio outro tópico na seção Harbour?


Josmar
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Fechar o Sistema Automático

Mensagem por rochinha »

Amiguinhos,

Josmar dos Santos,
Realmente, causou confusão. Pois a sessão é direcionada a respostas em Clipper e o fato de voce mostrar um trecho á lá Harbour me sugestionou a informá-lo que não deveria usar este código como base e sim usar as ferramentas próprias ao Clipper.

Ressucitar, só se o propósito for o de dar continuidade dentro do contexto. Senão a cabecinha do véinho aqui estoura.

Trancar, coitado do Toledo, se ele fosse revisar cada tópico e verificar se foi solucionado eu teria de dar vida eterna para ele e torná-lo escriba eternamente.

Acho até que o fato de não termos tópicos travados é que levamos anos com as mesmas ferramentas e os problemas, assim como os cabelos, continuam os mesmos.

Abra sim, um novo tópico na sessão correspondente e daremos continuidade.

AVISO:
Para os navegantes que por ventura vierem a este tópico procurando uma solução e necessitarem da biblioteca BGEvents, deixo o link para download:
BGEvents e várias outras
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Josmar dos Santos
Usuário Nível 3
Usuário Nível 3
Mensagens: 277
Registrado em: 11 Jan 2006 18:36
Localização: Botucatu-SP

Fechar o Sistema Automático

Mensagem por Josmar dos Santos »

O louco Rochinha...pelo que vi vc ainda ta em forma...kkkkk

Pode deixar vou criar outro tópico...fui um erro de interpretação ...desculpa ai...fui mal

Josmar
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Fechar o Sistema Automático

Mensagem por Eolo »

Eu uso KEYSEC() em meus sistemas, em cada ponto de parada.

Se o usuário deixar o sistema aberto, mesmo que seja 10 níveis abaixo, cada rotina vai sendo retornada ao nível superior até terminar por completo.

Exemplo:

Código: Selecionar todos

keysec(27,60,,.T.)
inkey(0)
keysec()
if lastkey()=27
  retu
endi
Se o usuário não teclar nada em 60 segundos, é gerado um ESC (chr27), que faz terminar o Inkey(0). Lastkey(), então, retorna 27.
Se ele teclar alguma coisa, o temporizador é desligado e Lastkey() retorna o que foi teclado.

Keysec(), sem argumentos, desliga o temporizador.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Fechar o Sistema Automático

Mensagem por JoséQuintas »

Desde que começou a história de 100% de CPU, eu só usei OSLIB e nenhuma outra.
E para o caso do Inkey(), substituí por MyInkey() e coloquei uso/abuso da OSLIB.

A OSLIB tem basicamente duas funções:

Uma pra liberar CPU automático:
OL_AutoYield(.T.)


Outra pra liberar na hora:
OL_Yield()

Então, dentro do MyInkey() era algo do tipo:

Código: Selecionar todos

FUNCTION MyInkey( nTempo )
   nKey := 0
   DO WHILE nKey == 0
      nKey := Inkey()
      OL_Yeld()
   ENDDO
   RETURN nKey
Só olhando backups antigos pra pegar a função completa, incluindo a contagem de tempo.
Depois alterar onde der, incluindo GETSYS.
E caso o usuário demorasse muito pra responder, o ESC assumia o retorno.

Mas tem que lembrar também das perguntas Sim ou Não, e outras, porque vão precisar de um default pra resposta.
No caso delas, coloquei pra assumir um default para o caso do usuário demorar, que podia ser Sim ou Não, dependendo do caso.

Por falar nisso.... usando a API do Windows pras mensagens, acabou ficando sem isso.
O usuário sempre encontra uma brecha pra manobrar essas coisas.

Hoje ouvi dos usuários: vamos almoçar e quando voltamos o sistema fechou.....
Mas também: nem email funcionava....

É que o servidor desconecta o terminal que fica mais de 15 minutos inativo... então tem essa também: se o programa não desconectar, o servidor faz isso, e nem se importa se haviam arquivos abertos.
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
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Fechar o Sistema Automático

Mensagem por Eolo »

Mas tem que lembrar também das perguntas Sim ou Não, e outras, porque vão precisar de um default pra resposta.
Ah, sim. Veja que eu disse "Exemplo" quando citei o chr27.
Esse retorno pode ser SsNn ou alguma outra coisa, ou tudo junto, dependendo de cada rotina.

O Fulano está fazendo manutenção em um cadastro, dá RLokc() em um registro, abre os GETs, altera alguma coisa e, como deu 18:00hs, se levanta e vai embora, deixando o Read e o Lock pendentes. Passado um minuto, um primeiro Keysec() retorna chr27 pra sair do Read e o Lock é liberado. Como houve alteração, a rotina pára numa mensagem perguntando se é pra gravar ou não a alteração. Mais um minuto sem resposta, um segundo Keysec() retorna um N (pra não gravar as alterações). Volta pro Browse e, passado outro minuto sem ação, um outro Keysec() fecha o Browse. E assim por diante.

Um outro caso específico é um EXE que monitora as vendas, mostrando um resumo do resultado até o momento (totais, margens etc). Como não há nenhuma intervenção do usuário, eu fico de olho na inatividade (das vendas) e no relógio. Se não há nenhuma venda há X tempo e o relógio já passou de terminado horário, chr27 nele, até encerrar.
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Fechar o Sistema Automático

Mensagem por lugab »

Eolo, bom dia...

Vc poderia expandir o exemplo abaixo ?
Onde é q entram o "GET" o "READ" para usar essa função ???
Eu uso KEYSEC() em meus sistemas, em cada ponto de parada. É simples e funciona.
Se o usuário for pra casa e deixar o sistema aberto, mesmo que seja 10 níveis abaixo, cada rotina vai sendo retornada ao nível superior até terminar por completo.
Exemplo:

Código: Selecionar todos

keysec(27,60,,.T.)
inkey(0)
keysec()
if lastkey()=27
 retu
endi
lugab
Responder