Página 1 de 1

Executar rotina após x minutos

Enviado: 12 Jan 2015 11:49
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,

Executar rotina após x minutos

Enviado: 12 Jan 2015 13:03
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.

Executar rotina após x minutos

Enviado: 12 Jan 2015 15:06
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

Executar rotina após x minutos

Enviado: 14 Jan 2015 19:59
por rbonotto
Pessoal, mais uma vez obrigado pela atenção :{

Funcionou belezinha Jairo !

O Harbour é impressionante de recusrsos mesmo.

Executar rotina após x minutos

Enviado: 14 Jan 2015 20:09
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,

Executar rotina após x minutos

Enviado: 07 Jun 2015 18:53
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

Executar rotina após x minutos

Enviado: 07 Jun 2015 19:20
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