Executar rotina após x minutos

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

rbonotto
Usuário Nível 3
Usuário Nível 3
Mensagens: 253
Registrado em: 06 Mai 2005 18:52

Executar rotina após x minutos

Mensagem por rbonotto »

Ola,

Eu tinha em clipper uma função que detectava que se o usuário não teclasse nada por xtempo ela iria entrar e rodar a função que eu indicasse,
era ótimo para colocar o nome do cliente passando na tela ( tipo um protetor de tela).

Mas esta função era da ptool50 ( ou newget50) que é incompativel com harbour.

Teria alguma função em harbour que seria semelhante ?

Abraços,
mixsistemas@gmail.com
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Executar rotina após x minutos

Mensagem por rochinha »

Amiguinho,

Estas funções geralmente trabalham em background e devem levar em consideração teclas presionadas e eventos de mouse.

Com multitasking do Harbour com certeza você mesmo consiga simular este processo.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Executar rotina após x minutos

Mensagem por Jairo Maia »

Olá Pessoal,

Controlo tudo em meus sistemas desta forma. Mas vale ressaltar que realmente as variáveis de controle devem ser publicas, como o caso das variáveis publicas deste exemplo. Também lembro que o retorno da NextKey() depende de como está setado SET EVENTMASK. Mas veja se ajuda:

Código: Selecionar todos

Function Main()

 Local cAlgo := Space( 30 )
      
 Public nTask, nIdle
 Public nTimeEspera := 5  // (tempo em segundos)
 PuBlic nTempo := ( Seconds() + nTimeEspera )

 Clear Screen
 nTask := HB_BackGroundAdd( {|| ChecaTempoCorrido() } )
 nIdle := HB_IdleAdd( {|| HB_BackGroundRun( nTask ) } )

 @ 2,2 Say "Tecle Algo: " Get cAlgo
 Read

 HB_BackGroundDel( nTask )  // coloque antes de sair do sistema
 HB_IdleDel( nIdle )

Return Nil

FuncTion ChecaTempoCorrido()

 Local nRow, nCol

 If ( NextKey() > 0 )
  nTempo := Seconds() 
 ElseIf Seconds() >= ( nTempo + nTimeEspera )  // se ficou ocioso pelo tempo determinado...

  HB_BackGroundDel( nTask )  // remove as acoes da Idle evitando recursividade
  HB_IdleDel( nIdle )
  
  nRow := Row() // linha do cursor
  nCol := Col() // coluna do cursor
  
  //////////////////////////////////////////////////
  @ 5,2 Say "Coloque aqui a chamada para sua Funcao"
  @ 6,2 Say Time()
  //////////////////////////////////////////////////
       
  nTempo := Seconds()                                     // atualiza nTempo
  nTask := HB_BackGroundAdd( {|| ChecaTempoCorrido() } )  // reativa a idle
  nIdle := HB_IdleAdd( {|| HB_BackGroundRun( nTask ) } )
  
  SetPos( nRow, nCol )  // restaura cursor

 EndIf

Return Nil
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)
rbonotto
Usuário Nível 3
Usuário Nível 3
Mensagens: 253
Registrado em: 06 Mai 2005 18:52

Executar rotina após x minutos

Mensagem por rbonotto »

Pessoal, mais uma vez obrigado pela atenção :{

Funcionou belezinha Jairo !

O Harbour é impressionante de recusrsos mesmo.
mixsistemas@gmail.com
rbonotto
Usuário Nível 3
Usuário Nível 3
Mensagens: 253
Registrado em: 06 Mai 2005 18:52

Executar rotina após x minutos

Mensagem por rbonotto »

Aproveitando...

Procurei aqui no fórum e não encontrei, existe a possibilidade de colocar uma figura ( .jpg, gif, bmp, etc) para aparecer
na tela usando o harbour no modo console ?

Abraços,
mixsistemas@gmail.com
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Executar rotina após x minutos

Mensagem por fladimir »

Olá pessoal, o meu funcionou em partes...

Coloquei como o Jairo postou e na parte q ele menciona pra colocar a chamada da função coloquei..

TesteFTP()...

Ok funciona com relação a esperar X segundos e entrar na rotina... mas o q ocorre é q AMARRA o processamento do sistema e no meu ponto de vista não poderia ocorrer... explico...

Se eu fizer um EXE a parte (vamos chamar de EXE1) e deixar ele rodando e abrir em outra janela outro EXE (vamos chamar de EXE2) vou trabalhando normal no EXE2 enquanto o o EXE1 vai processando, sem 1 interferir no outro...

Seria isto q eu queria fazer usando o exemplo do Jairo e o q ocorre é q qdo a Thread é startada amarra a rotina principal... ou seja... enquanto ta rodando a função q é chamada pela thread fica praticamente sem poder trabalhar...

Teria algum parâmetro ou algo do tipo pra não acontecer isto?

[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Executar rotina após x minutos

Mensagem por fladimir »

resolvi da seguinte forma...

qdo é pra chamar minha função coloquei pra chamar meu EXE com parametro em background assim:

MyRun( 'MeuSistema PARAMETRO', .F.)

Ai o MyRun roda em background e chama meu sistema q qdo ve o parametro chama a função TESTEFTP

Ai um não afeta no outro e funciona como preciso...

Mas isso foi 1 alternativa acredito q deva ter outra forma...

código do MyRun (link já com explicações)

[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Responder