Fechar o Sistema Automático
Moderador: Moderadores
-
Josmar dos Santos
- Usuário Nível 3

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
Fechar o Sistema Automático
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
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

- Mensagens: 250
- Registrado em: 24 Out 2008 17:02
- Localização: Itaocara - RJ - Brasil
Re: Fechar o Sistema Automático
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

Rca Sistemas - Itaocara - RJ
-
Josmar dos Santos
- Usuário Nível 3

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
Re: Fechar o Sistema Automático
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
Josmar
Re: Fechar o Sistema Automático
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!
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!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Fechar o Sistema Automático
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.
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.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Re: Fechar o Sistema Automático
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:
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/
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

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
Fechar o Sistema Automático
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..
Josmar
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 - rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Fechar o Sistema Automático
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.
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.
@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

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
Fechar o Sistema Automático
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
Josmar
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Fechar o Sistema Automático
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
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.
@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

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
Fechar o Sistema Automático
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
Pode deixar vou criar outro tópico...fui um erro de interpretação ...desculpa ai...fui mal
Josmar
Fechar o Sistema Automático
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:
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.
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 ele teclar alguma coisa, o temporizador é desligado e Lastkey() retorna o que foi teclado.
Keysec(), sem argumentos, desliga o temporizador.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Fechar o Sistema Automático
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:
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.
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
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/
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/
Fechar o Sistema Automático
Ah, sim. Veja que eu disse "Exemplo" quando citei o chr27.Mas tem que lembrar também das perguntas Sim ou Não, e outras, porque vão precisar de um default pra resposta.
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
Eolo, bom dia...
Vc poderia expandir o exemplo abaixo ?
Onde é q entram o "GET" o "READ" para usar essa função
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

