Clipper On Line • Ver Tópico - Inatividade de Sistema

Inatividade de Sistema

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Inatividade de Sistema

Mensagempor asimoes » 19 Nov 2020 11:57

Tenho essa função para testar a inatividade do sistema, o problema é que o Idle para quando uma função modal é executada tipo hwg_msginfo é executada, o intuito é saber se o sistema está em uso e inativo por x horas e derrubar ele.

nMonitor := Hb_IdleAdd( {|| Inatividade() } )
   
hwg_msginfo("Teste")

FUNCTION Inatividade()
THREAD STATIC nSeconds

   IF nSeconds = Nil
      nSeconds := Seconds()
   ENDIF
   
   IF Round( InatividadeSistema(), 0 ) == 0
      nSeconds := Seconds()
   ENDIF
   
   IF Seconds() - nSeconds >= 10
      nSeconds := Nil
      hwg_ExitProcess()
   ENDIF
   
RETURN Nil

#pragma BEGINDUMP

#include "windows.h"
#include "time.h"
#include "hbapi.h"

HB_FUNC( INATIVIDADESISTEMA )
{
   LASTINPUTINFO lpi;
   lpi.cbSize = sizeof (LASTINPUTINFO);
   GetLastInputInfo (&lpi);
   hb_retnd( ( DOUBLE ) ( GetTickCount() - lpi.dwTime ) / CLOCKS_PER_SEC );
}

#pragma ENDDUMP
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Inatividade de Sistema

Mensagempor asimoes » 19 Nov 2020 14:20

Já tinha resolvido com Thread

nThread := Hb_ThreadStart( HB_BITOR( HB_THREAD_INHERIT_PUBLIC, ;
                                     HB_THREAD_INHERIT_PRIVATE, ;
                                     HB_THREAD_INHERIT_MEMVARS ), ;
                                     HB_THREAD_MEMVARS_COPY, ;
                                     { || Inatividade() } )

FUNCTION Inatividade()
THREAD STATIC nSeconds

   DO WHILE .T.
   
      IF nSeconds = Nil
         nSeconds := Seconds()
      ENDIF
     
      IF Round( InatividadeSistema(), 0 ) == 0
         nSeconds := Seconds()
      ENDIF
     
      IF Seconds() - nSeconds >= 10
         nSeconds := Nil
         hwg_ExitProcess()
      ENDIF
   
   ENDDO
   
RETURN Nil
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Inatividade de Sistema

Mensagempor janio » 19 Nov 2020 14:48

Quanto tempo vc define para sair?
Vc sai da rotina/tela? ou sai do sistema?
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Inatividade de Sistema

Mensagempor JoséQuintas » 19 Nov 2020 14:50

Eu estou pensando em remover isso de vez.
Ao usar multithread/multitarefa, com certeza o usuário vai ter várias janelas, e sempre vai ter janela parada.

Criei pra determinadas situações: RunWhileThread()
É ficar executando enquanto outra rotina estiver em aberto.
Usava por exemplo em pedidos, pra avisar de pedidos atrasados.
Ao fechar a rotina de pedidos, também fechava essa rotina.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18156
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Inatividade de Sistema

Mensagempor asimoes » 19 Nov 2020 15:05

Eu defino uma inatividade de 8h se o usuário deixar o sistema aberto, e a inatividade atingir 8h o sistema é derrubado
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Inatividade de Sistema

Mensagempor Itamar M. Lins Jr. » 19 Nov 2020 20:01

Olá!
Ao usar multithread/multitarefa, com certeza o usuário vai ter várias janelas, e sempre vai ter janela parada.

Não precisa de MT, basta chamar o sistema quantas vezes desejar. O windows é MT, então ele resolve isso.

Nunca me preocupei com isso, derrubar o usuário da rede.
net stop letodbf_service
Derruba o servidor; Sem servidor, sem cliente na rede.
Mysql etc devem ter isso também.
No linux eu sei que tem.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6956
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

Inatividade de Sistema

Mensagempor asimoes » 20 Nov 2020 13:50

Usando HwGui

Exemplo de uso:

InatividadeApp( 300 ) // Encerra a aplicação em 5 min caso não tenha nenhuma atividade de teclado/mouse

#include "hwgui.ch"

THREAD STATIC ThisForm

FUNCTION InatividadeApp( nTimeOut )
LOCAL oDlg_Wait
   
   Hb_Default(@nTimeOut, 3600) // 1 hora

   INIT DIALOG oDlg_Wait ;
               TITLE       "" ;
               AT          0, 0 ;
               SIZE        0, 0 ;
               FONT        HFont():Add( 'Tahoma', 0, -13, 400 ) ;
               ON INIT     {|This| This:Hide()}
   
   ThisForm := oDlg_Wait
   
   Liga_Timer( oDlg_Wait, .T., 1000, { || Inatividade( nTimeOut ) }, "oTimer" )
   
   ACTIVATE DIALOG oDlg_Wait NOMODAL //SHOW SW_HIDE //ON ACTIVATE { || oDlg_Wait:Hide() }
   
RETURN oDlg_Wait

STATIC FUNCTION Liga_Timer( oJanela, lLiga, nTime, bBlock, oTimer )

   IF lLiga
      SET TIMER &oTimer. of oJanela VALUE nTime ACTION bBlock
   ELSE
      oJanela:&oTimer.:End()   
   ENDIF
   
RETURN Nil

STATIC FUNCTION Inatividade( nTimeOut )
THREAD STATIC nSeconds
LOCAL nIntCount

   Hb_Default(@nTimeOut, 3600) // 1 hora

   IF nSeconds = Nil
      nSeconds := Seconds()
   ENDIF
   
   nIntCount := Int( PegaInatividade() )
   
   IF nIntCount == 0
      nSeconds := Seconds()
   ENDIF
   
   IF Seconds() - nSeconds >= nTimeOut
      Liga_Timer( ThisForm, .F., , , "oTimer" )
      MensagemTimeOut("Encerrando a Aplicação", "Atenção", 10, 4)
      hwg_ExitProcess()
   ENDIF
   
RETURN Nil

#pragma BEGINDUMP

#include "windows.h"
#include "time.h"
#include "hbapi.h"

HB_FUNC_STATIC( PEGAINATIVIDADE )
{
   LASTINPUTINFO lpi;
   lpi.cbSize = sizeof (LASTINPUTINFO);
   GetLastInputInfo (&lpi);
   hb_retnd( ( DOUBLE ) ( GetTickCount() - lpi.dwTime ) / CLOCKS_PER_SEC );
}

#pragma ENDDUMP

INATIVIDADEAPP.PRG
(1.65 KiB) Baixado 28 vezes

MESSAGEBOX.PRG
(10.37 KiB) Baixado 44 vezes
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Inatividade de Sistema

Mensagempor asimoes » 20 Nov 2020 13:57

Estou usando isso, porque temos usuários locais e remotos e quando temos uma manutenção de sistema não conseguimos colocar em produção porque tem algum usuário "usando" na verdade a aplicação avisa que precisa sair para atualizar mas tem usuário que deixa o sistema logado ai a rotina corporativa que faz as atualizações finaliza a atualização, agora tem como estabelecer um timeout para inatividade
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Inatividade de Sistema

Mensagempor asimoes » 20 Nov 2020 13:59

Itamar M. Lins Jr. escreveu:Não precisa de MT, basta chamar o sistema quantas vezes desejar. O windows é MT, então ele resolve isso.

Nunca me preocupei com isso, derrubar o usuário da rede.


O BD é Oracle não pode ser derrubado.
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Inatividade de Sistema

Mensagempor asimoes » 20 Nov 2020 22:58

* 2 formas de fazer Hide da janela, pode também colocar no ON INIT da Dialog

1-
ACTIVATE DIALOG oDlg_Wait NOMODAL SHOW SW_HIDE

2-
ACTIVATE DIALOG oDlg_Wait NOMODAL ON ACTIVATE { || oDlg_Wait:Hide() }

Pode ser usado para outras finalidades como execução fantasma na aplicação

* Não usar style
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes




Retornar para HwGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro