Página 1 de 3
encerrar programa apos <n> Tempo ocioso????
Enviado: 27 Mai 2008 04:06
por adilson
Bom Dia Pessoal !
Existe Alguma Forma de Encerrar o Programa apos ficar o mesmo <N> tempo sem Uso
obrigado ...
Enviado: 27 Mai 2008 04:48
por Maligno
O principal é você conseguir descobrir SE o sistema está ocioso. Nativamente o Clipper não tem como informar isso. Mas há um truque simples: usando uma função de leitura de teclado diferente de InKey(). Seria uma função sua, chamada de GetKey(), por exemplo. Nela você chama InKey(), mas antes faz o controle de tempo. Passado o tempo configurado, você encerra o programa. Caso contrário, havendo alguma atividade de teclado, você recicla e recomeça a contar.
O problema maior é que InKey() é chamada internamente por funções as quais você não tem acesso. Logo, esse truque não é o ideal, não é perfeito, mas pode servir relativamente bem ao propósito.
encerrar programa apos <n> Tempo ocioso
Enviado: 27 Mai 2008 08:35
por Pablo César
Isso mesmo Maligno. Eu por exemplo para ver se está ocioso o meu sistema, faço passar logo no inicio de execução, por uma rotina de configuração de ambiente na qual incluo a função KEYSEC da CT.LIB que serve para verificar a inatividade do teclado. Eu utilizo meu sistemas de menus baseados no INKEY() e executo determinadas rotinas conforme o retorno do INKEY através de DO CASEs. Daí então atribuo o retorno da função KEYSEC a uma tecla que não é utilizada nos menus, por exemplo CH(255) ficando: KEYSEC(CHR(255),<tempo_em_segundos>,-1,.T.). E quando acionada determinada tecla (como neste caso CHR(255)) possa acionar a chamada de um protetor de tela.
Lembrando que na versão 5.3 do Clipper, o INKEY() tem um segundo parâmetro que pode ser utilizado, que é para verificar os eventos do teclado e/ou mouse. Isto permite que qualquer ação que ocorra possa permitir a saída de um protetor de tela, ficando desta maneira a sua saída:
Código: Selecionar todos
IF INKEY(<temporização>,159)>0
KEYBOARD CHR(255)
EXIT
ENDIF
Outra medida, um tanto radical, é inserir no GETSYS.PRG a temporização para saída de cada GET. Quando falo em temporização é a quantidade de segundos que o sistema deve esperar e isso eu deixo que o usuário configure, mas disponibilizo essa configuração em minutos.
Re: encerrar programa apos <n> Tempo ocioso????
Enviado: 27 Mai 2008 13:13
por ANDRIL
Outra opção é utilizar a EVEN.LIB para ativar uma função de controle de 2o.plano. Crie uma função que fique monitorando o teclado, se nao tiver uso (inkey()=0) dispara um contador durante um certo tempo, se nao voltar ao uso ao fim da contagem, encerra o programa.
Usei esta lib para execução de screensave, inicialmente usava a KEYSEC da CTP.LIB, devido a problema quando havia calculos longo no sistema (dava erro), migrei para EVEN.LIB
É apenas mais uma opção... basta escolher.
Ate+
EVEN.LIB
Enviado: 27 Mai 2008 13:22
por Pablo César
Andril, esta biblioteca é da BGEVENTS ? Qual seria a função que deixa uma função em segundo plano ? Poderias dar exemplos ?
Re: encerrar programa apos <n> Tempo ocioso????
Enviado: 27 Mai 2008 13:59
por ANDRIL
Andril, esta biblioteca é da BGEVENTS ?
R: Sim
Qual seria a função que deixa uma função em segundo plano ?
Código: Selecionar todos
Function MAIN()
Define backgroundevent Action gereimpre() Name "UdfClock1" interval 2.00
return
Neste caso GEREIMPRE() é minha função que tem um contador. A cada intervalo de 2 minutos ela repete a função. Quando a funcao é executada ela reinicia o contador, a funcao fica em loop ate que seja teclado um INKEY() diferente de ZERO.
Tentei localizar a funções porem ainda nao encontrei aqui nos meus diretorios... qtos prgs... mais em suma, é só criar um loop e que saia apenas qdo alguma tecla # de zero seja utilizada reiniciando o contador.
Se nao me engano ao baixar a BGEVENTS ha alguns exemplos, ou nem me lembro como cheguei nesta função.
Qualquer dúvida, tamos aí, ok!
BGEVENTS
Enviado: 27 Mai 2008 14:17
por Pablo César
Não ficou ainda claro sua exemplificação. Entendo que ficou te faltando a documentação da BGEVENTS (eu também não possuo). Mas não entendí porquê você uso a função MAIN ja que supõe-se o uso do backgroundevent é uma directiva do BGEVENTS.CH, agora caberia ver seu exemplo quando encontres o PRG que utiliza o backgroundevent (não precisa ser para agora, mas seria interessante saber como é feito).
Obs.: Andril, para obter sucesso na sua procura desse exemplo, procure todo PRG que utilize o INCLUDE bgevents.ch.
Re: encerrar programa apos <n> Tempo ocioso????
Enviado: 27 Mai 2008 16:05
por ANDRIL
Plabo, usei o nome MAIN para a funcao que chama a declaração, porem pode ser qualquer nome para a função.
O importante é que tenha uma função para chamar a especificação DEFINE (q é diferente da #DEFINE) do clipper, se nao tiver em uma função, durante a compilação já informará erro, se não me falha a memoria, era uma informação da própria lib.
Tentei citar um exemplo salve-os e teste.
Clipper teste
rtlink ou blinker fi teste lib EVEN
ok.
Código: Selecionar todos
PROCEDURE TESTE
set date brit
set cent on
set dele on
* esta funcao chama o evento
monitora()
* abra seu banco de dados
use SEUBANCO
dbedit(03,00,23,79)
QUIT
Código: Selecionar todos
Function MONITORA
Define backgroundevent Action SSAVEPRG() Name "UdfClock1" interval 1
return
Código: Selecionar todos
PROC SSAVEPRG
static ssave
IF ssave == NIL
ssave:=1
ENDIF
if ssave=10
* 10 é o tempo de ociosidade pois se ficar 10 seg sem usar o teclado
* executa a sua função
Wait"Aqui coloque sua função para encerramento do sistema"
keyb chr(0)
ssave:=1
endif
* esta linha é apenas para exibir o contador durante o teste
* pode ser retirada
@24,01 say ssave
ssave++
if lastkey()#0
keyb chr(0)
ssave:=1
endif
return ssave
Agora fiquei em dúvida se eu alterei o nome da BGEVENTS.LIB para EVEN.LIB ou existe realmente esta EVEN.LIB.
ate+
EVEN.LIB
Enviado: 27 Mai 2008 16:26
por Pablo César
ANDRIL escreveu:O importante é que tenha uma função para chamar a especificação DEFINE (q é diferente da #DEFINE) do clipper, se nao tiver em uma função, durante a compilação já informará erro, se não me falha a memoria, era uma informação da própria lib.
Pode até ser, mas ainda acho que é necessário ser colocado o #Include "BGEVENTS.CH" para que tenha efeito.
Peguei todo o seu código exemplo e adicionei o include para poder compilar, pois do contrário dá erro:
Error C2001 Syntax error: 'BACKGROUNDEVENT' olhe como ficou:
Código: Selecionar todos
#Include "BGEVENTS.CH"
set date brit
set cent on
set dele on
* esta funcao chama o evento
monitora()
* abra seu banco de dados
use CLIENTES
dbedit(03,00,23,79)
Function MONITORA
Define backgroundevent Action SSAVEPRG() Name "UdfClock1" interval 1
return
PROC SSAVEPRG
static ssave
IF ssave == NIL
ssave:=1
ENDIF
if ssave=10
* 10 é o tempo de ociosidade pois se ficar 10 seg sem usar o teclado
* executa a sua função
Wait"Aqui coloque sua função para encerramento do sistema"
keyb chr(0)
ssave:=1
endif
* esta linha é apenas para exibir o contador durante o teste
* pode ser retirada
@24,01 say ssave
ssave++
if lastkey()#0
keyb chr(0)
ssave:=1
endif
return ssave
Compilei com clipper 5.2E + RTLINK + EVEN.LIB, executei e exibiu meu CLIENTES.DBF e mostrou os 10 segundos em que ocorreria uma interrupção. Funcionou.
Agora fiquei em dúvida se eu alterei o nome da BGEVENTS.LIB para EVEN.LIB ou existe realmente esta EVEN.LIB
Eu acho que o EVEN.LIB é a própria biblioteca, pois eu não possuo BGEVENTS.LIB alguma. Obrigado Andril.
Enviado: 27 Mai 2008 16:51
por Maligno
Há uma biblioteca chamada BGEvents no site "
The Oasis". Deve ser essa sobre a qual discutem. Peguem ela completa neste site.
Enviado: 27 Mai 2008 17:04
por Maligno
Enviado: 27 Mai 2008 17:06
por Maligno
Esqueci que também tinha carregado no meu site. Até vou tirar. De qualquer forma, o link pra ele (por enquanto) é
http://pub.buzinello.com/xbase/clipper/ ... nts_v5.zip
EDITADO: Acabei de remover do meu site. Quem quiser, terá de pegar do site "The Oasis". Link acima.
EVEN.LIB
Enviado: 27 Mai 2008 17:07
por Pablo César
Neste também não possui o EVEN.LIB
Enviado: 27 Mai 2008 17:08
por Maligno
Será que a LIB não foi renomeada? Comparou os tamanhos?
Re: encerrar programa apos <n> Tempo ocioso????
Enviado: 27 Mai 2008 17:21
por ANDRIL
Realmente Pablo esqueci de mencionar no exemplo a inclusão do BGEVENTS.CH
me desculpe.
Quanto a BGEVENTS.LIB nao tenho ela aqui, por isso disse que talvez tivesse renomeado para EVEN.LIB
Ate+