Página 1 de 2

Fechar o Sistema Automático

Enviado: 28 Jul 2010 14:02
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

Re: Fechar o Sistema Automático

Enviado: 28 Jul 2010 14:06
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

Re: Fechar o Sistema Automático

Enviado: 28 Jul 2010 14:15
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

Re: Fechar o Sistema Automático

Enviado: 28 Jul 2010 14:18
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. :)

Fechar o Sistema Automático

Enviado: 28 Jul 2010 14:46
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

Re: Fechar o Sistema Automático

Enviado: 30 Jul 2010 16:25
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

Fechar o Sistema Automático

Enviado: 02 Jun 2015 17:25
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

Fechar o Sistema Automático

Enviado: 03 Jun 2015 00:29
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.

Fechar o Sistema Automático

Enviado: 03 Jun 2015 07:53
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

Fechar o Sistema Automático

Enviado: 03 Jun 2015 09:09
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

Fechar o Sistema Automático

Enviado: 03 Jun 2015 09:18
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

Fechar o Sistema Automático

Enviado: 03 Jun 2015 10:59
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.

Fechar o Sistema Automático

Enviado: 03 Jun 2015 20:31
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.

Fechar o Sistema Automático

Enviado: 04 Jun 2015 10:59
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.

Fechar o Sistema Automático

Enviado: 13 Set 2015 06:59
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