Disparar um processo

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

evaldowl
Usuário Nível 1
Usuário Nível 1
Mensagens: 12
Registrado em: 06 Nov 2008 17:33
Localização: sao paulo

Disparar um processo

Mensagem por evaldowl »

ola amigos,

estou com uma necessidade que não consegui imaginar como fazer.

preciso disparar uma atualizacão diaria que nada mais é que um laço while ! eof() e dentro desse laço atualiza alguns campos.
Acontece que não queria fazer por fora da aplicação e sim dentro mais sem ser atrave s de uma opção do menu, tipo determinado usuario se loga no sistena e dispara o processo, mais o importante é que fique transparente para o usuario, ele continua com sua operação do sistema normalmente, pois o processo demora uns 5 minutos.
Alguem ve alguma forma de se fazer isso?

uso clipper e xharbour.

Obrigado.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Disparar um processo

Mensagem por Maligno »

Uma das formas é fazer a checagem da necessidade de disparar o gatilho quando executando a função Inkey(). Você criaria uma função com outro nome, por exemplo GetKey(), e de tempos em tempos ela verificaria a necessidade. Claro que, ao final da execução, essa função chamaria a velha InKey() com os mesmos argumentos.

Uma outra possibilidade é você utilizar uma função que rode em background, e que faça esse trabalho ao mesmo tempo em que o programa roda. Há duas bibliotecas com funções do tipo: a NanForum ToolKit (função FT_OnTick()), que tenho no meu site e uma outra chamada BGEvents, cujo arquivo (bgev5.zip) pode ser baixado do site The Oasis. Detalhes no ZIP.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Re: Disparar um processo

Mensagem por ANDRIL »

Quando precisei usar algo em segundo plano, usei a BGEvents. Porem, se for para executar alguma tarefa como um loop, acho que nao ficara bom.

A tarefa principal (primeiro plano) e a(s) tarefa(s) em segundo dividem o processamento do sistema (clipper), ou seja, numa operação de loop, o sistema ficara preso até que o loop termine. Os Eventos são disparados conforme o intervalo de tempo definido, mais, só voltam ao principal quando a função terminar. Enquanto isso, creio que usuário não conseguira trabalhar, pois acho que a tela principal irá travar.

Não ocorre como vc abrir o sistema principal no Windows e depois abrir outro aplicativo em outra janela ( mesmo assim o windows deixara sua aplicação principal mais lenta ).

De qualquer forma não custa tentar.

Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Disparar um processo

Mensagem por Maligno »

Esse esquema de código rodando em background é realmente muito bom mas, como o Clipper não trabalha com threads, se ficar muito carregado, pode muito bem "amarrar" o programa, causando uma lentidão.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Responder