encerrar programa apos <n> Tempo ocioso????

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
adilson
Usuário Nível 2
Usuário Nível 2
Mensagens: 93
Registrado em: 01 Fev 2008 07:02
Localização: americana - sao paulo

encerrar programa apos <n> Tempo ocioso????

Mensagem por adilson »

Bom Dia Pessoal !

Existe Alguma Forma de Encerrar o Programa apos ficar o mesmo <N> tempo sem Uso ???


obrigado ...
Burroughs L3000 (4 kb ram) e B700,Labo 8034-8038 (Basic Nixdorf),Apple II plus,Clipper 5.2e e começando com xharbour 0.99.70
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'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á

encerrar programa apos <n> Tempo ocioso

Mensagem 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.
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
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: encerrar programa apos <n> Tempo ocioso????

Mensagem 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+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
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á

EVEN.LIB

Mensagem 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 ?
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
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: encerrar programa apos <n> Tempo ocioso????

Mensagem 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!
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
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á

BGEVENTS

Mensagem 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.
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
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: encerrar programa apos <n> Tempo ocioso????

Mensagem 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+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
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á

EVEN.LIB

Mensagem 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.
Anexos
BGEVENTS.CH
(2.09 KiB) Baixado 300 vezes
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
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Há uma biblioteca chamada BGEvents no site "The Oasis". Deve ser essa sobre a qual discutem. Peguem ela completa neste site.
[]'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
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

[]'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
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'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á

EVEN.LIB

Mensagem por Pablo César »

Neste também não possui o EVEN.LIB
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
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Será que a LIB não foi renomeada? Comparou os tamanhos?
[]'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
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: encerrar programa apos <n> Tempo ocioso????

Mensagem 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+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Responder