Inatividade de Sistema

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Inatividade de Sistema

Mensagem por asimoes »

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.

Código: Selecionar todos

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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Inatividade de Sistema

Mensagem por asimoes »

Já tinha resolvido com Thread

Código: Selecionar todos

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 do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Inatividade de Sistema

Mensagem por janio »

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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Inatividade de Sistema

Mensagem por JoséQuintas »

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 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/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Inatividade de Sistema

Mensagem por asimoes »

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 do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Inatividade de Sistema

Mensagem por Itamar M. Lins Jr. »

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.

Código: Selecionar todos

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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Inatividade de Sistema

Mensagem por asimoes »

Usando HwGui

Exemplo de uso:

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

Código: Selecionar todos

#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 148 vezes
MESSAGEBOX.PRG
(10.37 KiB) Baixado 180 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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Inatividade de Sistema

Mensagem por asimoes »

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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Inatividade de Sistema

Mensagem por asimoes »

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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Inatividade de Sistema

Mensagem por asimoes »

* 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)
Responder