Encerrar Programa após um tempo de inatividade
Moderador: Moderadores
Encerrar Programa após um tempo de inatividade
Boa tarde amigos!
Tem como encerrar uma aplicação escrita em Harbour console após um tempo sem usar o teclado?
Tem como encerrar uma aplicação escrita em Harbour console após um tempo sem usar o teclado?
Flávio dos Santos Szelbracikowski
ssflavio@osite.com.br
ssflavio@osite.com.br
Encerrar Programa após um tempo de inatividade
eu uso xhb
controlo uma variavel setando com o Time
la funcao Get no menu etc
funio
na ok
Paiva
WVW_SETTIMER(0,1000*60*60*val(tinte_12)) && 1.000 = 1 seg x 60 = 1 Minuto x 05 = a cada X horas, Verifica
controlo uma variavel setando com o Time
la funcao Get no menu etc
funio
na ok
Paiva
WVW_SETTIMER(0,1000*60*60*val(tinte_12)) && 1.000 = 1 seg x 60 = 1 Minuto x 05 = a cada X horas, Verifica
Código: Selecionar todos
//----------------------------------------------------------------------------//
FUNCTION WVW_TIMER( nWindow, hWnd, message, wParam, lParam )
xtime_atual_n = F_TtoS(time())
xtime_anter_n = F_TtoS(p_t_time)
x_derruba = .f.
xtempo_dd = (date() - p_t_date )
* tinte_12 && Pag 21
do case
case xtempo_dd = 0 && no mesmo dia
xtime_dif = xtime_atual_n - xtime_anter_n
if val(tinte_12) > 3
if xtime_dif > val(tinte_12) * 60
x_derruba = .T.
endif
else
if xtime_dif > val(tinte_12) * 60 * 60
x_derruba = .T.
endif
endif
case xtempo_dd = 1 && no dia seguinte
xtime_dif = (xtime_atual_n + (24*60*60) ) - xtime_anter_n
if val(tinte_12) > 3
if xtime_dif > val(tinte_12) * 60
x_derruba = .T.
endif
else
if xtime_dif > val(tinte_12) * 60 * 60
x_derruba = .T.
endif
endif
otherwise
x_derruba = .T.
endcase
if x_derruba = .T.
set device to screen
set color to &pvermelho
clear
@ 05,02 say " Por Motivo de SEGURANCA... "
@ 08,02 say "Por estar PARADO mais de "+tinte_12+" Minutos, O sistema FOI DESATIVADO. "
@ 12,02 say "Caso Precise, Chame NOVAMENTE o Sistema e EVITE Deixa-lo Parado. "
pmostra_erro = [N]
_finaliza()
x_re_indexou = memoread('\dbdc\reindex.txt')
x_re_indexou = x_re_indexou + CHR(13)+CHR(10)
x_re_indexou = x_re_indexou + [TIME Parado mais de ]+tinte_12+" Minutos, O sistema FOI DESATIVADO. " +dtoc(date())+[ Hora: ]+time()+[ Usu: ]+pusuario
MemoWrit( '\dbdc\reindex.txt', x_re_indexou )
close databases
pmostra_erro = [N]
quit
quit
endif
RETURN
Editado pela última vez por Itamar M. Lins Jr. em 15 Set 2021 20:35, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Encerrar Programa após um tempo de inatividade
Eu uso Inkey(600) por exemplo, e se retornar ZERO, é porque ninguém teclou nada.
Mas isso exige mexer na GETSYS, e em outros lugares.
Em caso de retornar 0, aciono um KEYBOARD Chr(K_ESC).
Mas isso exige mexer na GETSYS, e em outros lugares.
Em caso de retornar 0, aciono um KEYBOARD Chr(K_ESC).
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/
Encerrar Programa após um tempo de inatividade
obrigado pelo apoio!
essas soluções são bem CLIPPER, será que o Harbour não teria uma solução melhor?
essas soluções são bem CLIPPER, será que o Harbour não teria uma solução melhor?
Flávio dos Santos Szelbracikowski
ssflavio@osite.com.br
ssflavio@osite.com.br
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Encerrar Programa após um tempo de inatividade
Em Harbour, você pode usar dessa forma (coloque no início do sistema):ssflavio escreveu:será que o Harbour não teria uma solução melhor?
Código: Selecionar todos
//SET EVENTMASK TO INKEY_ALL // Se usa mouse, descomente essa linha para NextKey() pegar eventos do mouse
nTimeWait := 30 // Defina aqui o Tempo em segundos
nTimeSleep := Time() // Inicia valor da variável de controle
nTask1 := HB_IdleAdd( {|| nTimeSleep := If( NextKey() > 0, Time(), nTimeSleep ) } )
nTask2 := HB_IdleAdd( {|| If( Secs( Elaptime( nTimeSleep, Time() ) ) > nTimeWait, __Quit(), "" ) } )Se for usar HB_IdleAdd() de forma diferente, precisa fechar os handlers após executar a tarefa usando: HB_IdleDel( nTask1 ), HB_IdleDel( nTask2 ), etc...
NOTA: Defina na variável nTimeWait o tempo de espera desejado em Segundos.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Encerrar Programa após um tempo de inatividade
Paiva, pensando bem, como voce alterou o getsys no harbour?
dessa forma acho que eu conseguiria implementar no meu sistema
dessa forma acho que eu conseguiria implementar no meu sistema
Flávio dos Santos Szelbracikowski
ssflavio@osite.com.br
ssflavio@osite.com.br
Encerrar Programa após um tempo de inatividade
EU ainda uso a wvw
então eu troquei em todos os prg o read por Wread(Janela)
e criei uma função Wread
nela eu faço alguma coisa da WVW e tem dentro dela um READ rs
posso mandar a funcao wread caso precise ai teria que tirar os comandos wvw + é simples
cpaivasistemas@gmail.com
skyper Paiva_sistemas
então eu troquei em todos os prg o read por Wread(Janela)
e criei uma função Wread
nela eu faço alguma coisa da WVW e tem dentro dela um READ rs
posso mandar a funcao wread caso precise ai teria que tirar os comandos wvw + é simples
cpaivasistemas@gmail.com
skyper Paiva_sistemas
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Encerrar Programa após um tempo de inatividade
Olá!
Segue outra opção, que dispensa alterar o GetSys:
Segue outra opção, que dispensa alterar o GetSys:
Código: Selecionar todos
// Alexandre Santos
#include "inkey.ch"
PROCEDURE Main
LOCAL pTask, aVar := AFill( Array( 3 ), Space(10 ) )
LOCAL nWaitSeconds := 3000, lTimeOut := .F., GetList := {}
Set( _SET_EVENTMASK, INKEY_ALL )
CLS
pTask := HB_IdleAdd( { || lTimeOut := Timer( nWaitSeconds, GetActive(), pTask ) } )
@ 10,10 say 'Campo 1' get aVar[ 1 ]
@ 11,10 say 'Campo 2' get aVar[ 2 ]
@ 12,10 say 'Campo 3' get aVar[ 3 ]
Read
If lTimeOut
Alert( "Tempo esgotado. Encerrando..." )
Endif
RETURN
//-----------------------------------------------------------------------------------------
FUNCTION Timer( nLimit, oGet, pTask )
STATIC nMiliSec
LOCAL lTimeOut := .F.
If Empty( nMiliSec )
nMiliSec := If( Empty( nLimit ), 10000, nLimit )
Endif
While ( nMiliSec > 0 .And. NextKey() == 0 )
Hb_IdleSleep( .1 )
nMiliSec -= 100
Enddo
If nMiliSec <= 0
If Valtype( oGet ) == "O"
ReadKill( .T. )
Endif
lTimeOut := .T.
HB_IdleDel( pTask )
Hb_KeyPut( K_ENTER )
Else
nMiliSec := nLimit
Endif
RETURN lTimeOut
//-----------------------------------------------------------------------------------------[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
Encerrar Programa após um tempo de inatividade
muito obrigado Jairo!Jairo Maia escreveu:Em Harbour, você pode usar dessa forma (coloque no início do sistema):ssflavio escreveu:será que o Harbour não teria uma solução melhor?
As variáveis nTask1 e nTask2 você pode suprimir nesse caso, já que serão automaticamente fechadas as Tasks (Tarefas) ao encerrar o sistema.Código: Selecionar todos
//SET EVENTMASK TO INKEY_ALL // Se usa mouse, descomente essa linha para NextKey() pegar eventos do mouse nTimeWait := 30 // Defina aqui o Tempo em segundos nTimeSleep := Time() // Inicia valor da variável de controle nTask1 := HB_IdleAdd( {|| nTimeSleep := If( NextKey() > 0, Time(), nTimeSleep ) } ) nTask2 := HB_IdleAdd( {|| If( Secs( Elaptime( nTimeSleep, Time() ) ) > nTimeWait, __Quit(), "" ) } )
Se for usar HB_IdleAdd() de forma diferente, precisa fechar os handlers após executar a tarefa usando: HB_IdleDel( nTask1 ), HB_IdleDel( nTask2 ), etc...
NOTA: Defina na variável nTimeWait o tempo de espera desejado em Segundos.
não acreditei que funcionou!
4 linhas apenas!
GRATIDÃO!!!
Flávio dos Santos Szelbracikowski
ssflavio@osite.com.br
ssflavio@osite.com.br
- Nascimento
- Usuário Nível 4

- Mensagens: 763
- Registrado em: 19 Jul 2008 12:11
- Localização: OLINDA-PE
Encerrar Programa após um tempo de inatividade
tambem tem da hbct
keysec(27,80,,.T.) // tecla, tempo , falso ou verdadeiro
keysec(27,80,,.T.) // tecla, tempo , falso ou verdadeiro
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina
clipper 5.3 /harbour/minigui
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Encerrar Programa após um tempo de inatividade
Sim. Mas a KeySec() não funciona para fechar um sistema.Nascimento escreveu:keysec(27,80,,.T.) // tecla, tempo , falso ou verdadeiro
Sintaxe: KeySec( <nKey>, <nTime>, [<nCounter>], [<lMode>] )
Onde obrigatório:
<nKey> = Tecla a ser inserida no Buffer do teclado
<nTime> = Tempo a esperar para inserir a tecla
Onde opcional:
[<nCounter>] = Número de vezes a colocar a tecla no Buffer do teclado (se omitido, o padrão é 1 vez)
[<lMode>] = Se colocar .T., o tempo é resetado ao teclar algo (se omitido, o padrão é .F., ou seja não reseta)
Ocorre que se o usuário abriu 2 ou 3 telas após iniciar o sistema, e ESC retorna a função anterior, então se configurar para 30 minutos colocar um ESC, o sistema será fechado somente após 60 ou 90 minutos. Não funciona para o intento do autor do tópico.
Retorno de KeySec(): Retorna .T. enquanto o tempo estiver dentro do determinado, e retorna .F. se o tempo for esgotado, ou se o quarto parâmetro for .T., retorna .F. ao teclar algo e resetar o tempo.
Para desativar KeySec(): Colocar sem parâmetros, ou seja, apenas: KeySec() e desativa.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Encerrar Programa após um tempo de inatividade
Fiquei com uma dúvida Jairo,Jairo Maia escreveu:Em Harbour, você pode usar dessa forma (coloque no início do sistema):ssflavio escreveu:será que o Harbour não teria uma solução melhor?
As variáveis nTask1 e nTask2 você pode suprimir nesse caso, já que serão automaticamente fechadas as Tasks (Tarefas) ao encerrar o sistema.Código: Selecionar todos
//SET EVENTMASK TO INKEY_ALL // Se usa mouse, descomente essa linha para NextKey() pegar eventos do mouse nTimeWait := 30 // Defina aqui o Tempo em segundos nTimeSleep := Time() // Inicia valor da variável de controle nTask1 := HB_IdleAdd( {|| nTimeSleep := If( NextKey() > 0, Time(), nTimeSleep ) } ) nTask2 := HB_IdleAdd( {|| If( Secs( Elaptime( nTimeSleep, Time() ) ) > nTimeWait, __Quit(), "" ) } )
Se for usar HB_IdleAdd() de forma diferente, precisa fechar os handlers após executar a tarefa usando: HB_IdleDel( nTask1 ), HB_IdleDel( nTask2 ), etc...
NOTA: Defina na variável nTimeWait o tempo de espera desejado em Segundos.
Ao fechar o sistema, ele fecha todos os arquivos primeiro?
é seguro para os índices? Eu uso .NTX
Flávio dos Santos Szelbracikowski
ssflavio@osite.com.br
ssflavio@osite.com.br
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Encerrar Programa após um tempo de inatividade
Sim! Veja que a função é encerrada com a função __Quit().ssflavio escreveu:Ao fechar o sistema, ele fecha todos os arquivos primeiro?
A função __Quit() Salva todos registros pendentes, fecha todos arquivos abertos e eventuais handlers (controladores) de arquivos, tarefas ou funções "de baixo nível", e encerra o sistema de forma incondicional.
Se você usa uma EXIT PROCEDURE <NameExitProcedure>, ela será executada antes de ser fechado o sistema.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Encerrar Programa após um tempo de inatividade
Olá!
Como escrito acima, fecha todos os arquivos abertos e executa uma EXIT PROCEDURE, caso haja, desde que não haja nenhum erro de execução. Mas nada impede de, ao invés de dar Quit (ou __Quit() ), desviar para uma rotina que execute os procedimentos de finalização.QUIT
Terminates program execution unconditionally.
Syntax
QUIT
Description
The QUIT command terminates program execution unconditionally. Before control goes back to the operating system, all files are closed and all EXIT PROCEDURES are executed, unless a runtime error occurs during program shutdown. In this case, the ErrorLevel() function is set to 1 which is the applications's return code to the operating system.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Encerrar Programa após um tempo de inatividade
Olá!
Saudações,
Itamar M. Lins Jr.
Código: Selecionar todos
nTask2 := HB_IdleAdd( {|| If( Secs( Elaptime( nTimeSleep, Time() ) ) > nTimeWait, {|| DbCloseall(), minhafunção(...), etc,__Quit() }, "" ) } )Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.

