DO EVENTS

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

DO EVENTS

Mensagem por Hasse »

Bom dia colegas.

a)-Onde e como posso estudar e aprender algo a respeito de DO EVENTS e suas variantes ?

b)-Em quais situações o DO EVENTS traz problemas ?


Preciso aprender e dominar este comando / função ( ???? ) - Entender o que ele faz, qual a sua real utilidade.

Procurei no Fórum e nada me ajudou.

Procurei na Internet ->
https://support.microsoft.com/pt-br/kb/118468/pt-br, e a coisa complicou de vez.....

Aqui até melhorou um pouco ->
http://forum.baboo.com.br/index.php?/to ... -que-isso/
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

DO EVENTS

Mensagem por HASA »

:))
Eu uso o Do Events no caso de chamadas repetitivas a eventos EX:

form1.texto1.enable := .f.
form1.texto2.enable := .f.
form1.texto3.enable := .f.
form1.texto4.enable := .f.

do events

Quando carrego uma progressbar na indexação de arquivos, e sempre que executo vários comando de uma vez, o Do events libera o processamento impedindo aquela impressão que o sistema travou, ficando BRANCA a tela ou dando a mensagem que o sistema parou de responder ok.

Uso assim
:)Pos
HASA
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

DO EVENTS

Mensagem por alxsts »

Olá!

Em uma tradução livre, "do events" significa "execute eventos". Mas quais eventos? Resposta: os eventos do sistema operacional e de outros processos em execução.

Este comando é indicado quando um aplicativo executa tarefas demoradas e/ou que consumam vários recursos do sistema, tomando tempo e recursos de outros processos. Quando se emite um DO EVENTS, estamos dizendo ao sistema operacional para dedicar uma fatia de seu tempo aos outros processos. Como o sistema operacional trabalha em multi-tarefa, o tempo é dividido entre as tarefas, de acordo com as prioridades definidas.
[]´s
Alexandre Santos (AlxSts)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

DO EVENTS

Mensagem por Hasse »

Boa tarde.

Obrigado aos colegas HASA e alxsts que me encaminharam os seus conhecimentos a respeito.

Nos próximos dias postarei algumas dúvidas concretas, com códigos.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

DO EVENTS

Mensagem por Hasse »

Bom dia HASA e alsxts.

Voltando ao assunto DO EVENTS....

Quando iniciei o desenvolvimento do meu primeiro aplicativo em MiniGui, tive a inestimável colaboração do colega ASimoes.

No código há algumas linhas do tipo LABEL que informam o andamento do processo.

Estes LABEL estão, tanto na rotina de leitura de um Banco baseado em Oracle como também em pequenas funções chamadas a partir dela.

Quando o foco estava fora da tela (só tem uma), ou seja, o operador estava usando outro aplicativo naquele momento, as informações não eram atualizadas conforme os LABEL eram processados.

Para contornar isto, o colega ASimoes sugeriu usar o "HB_IdleSleep( 1 )" mais o "DO EVENTS". Isto deveria servir para "setar" o LABEL, como abaixo:

Código: Selecionar todos

FUNCTION Baixa_Prescr( oConexao )
   ...
   ...
   _SetValue( 'label_1', 'form_1', 'Conexão ATIVA' )
   Form_1.label_1.FontColor := RED
   _SetValue( 'label_1', 'Form_1', '* * = = Abrindo conexão com o ' + c_NmHospCt + ' = = * *' )
   _SetValue( 'label_2', 'Form_1', '* * = = ' + c_NmHospLg + ' = = * *' )
   HB_IdleSleep( 1 )
   DO EVENTS
   ...
   ...
   Form_1.Title := "ConexÆo ATIVA com o Oracle do Hospital " + c_NmHospCt
   Form_1.label_1.FontColor := BLUE
   _SetValue( 'label_1', 'Form_1', '* * = = Conexão ABERTA com o ' + c_NmHospCt + ' = = * *' )
   HB_IdleSleep( 1 )
   DO EVENTS
   ...
   ...
   Form_1.label_1.FontColor := GREEN
   _SetValue( 'label_1', 'Form_1', 'Importando Prescrição n§ ' + c_Prescric )
   Form_1.label_2.FontColor := BLUE
   _SetValue( 'label_2', 'Form_1', 'Paciente: ' + c_Nome1 )
   HB_IdleSleep( 1 )
   DO EVENTS
   ...
   ...
   Form_1.label_2.FontColor := BLUE
   _SetValue( 'label_2', 'Form_1', 'Gravando a data/hora da BAIXA da Prescrição' )
   HB_IdleSleep( 1 )
   DO EVENTS
   ...
   ...
   Form_1.label_1.FontColor := BLUE
   _SetValue( 'label_2', 'Form_1', 'Download da Prescrição ' + c_Prescric + ' finalizada' )
   HB_IdleSleep( 1 )
   DO EVENTS
   ...
   ...
   Form_1.label_1.FontColor := BLUE
   _SetValue( 'label_1', 'Form_1', 'ENCERRADA a Conexão com o TASY - Aguardando novo período.' )
   _SetValue( 'label_2', 'Form_1', 'Não há mais Prescrições para baixar.' )
   HB_IdleSleep( 1 )
   DO EVENTS
   ...
   ...
RETURN( l_Conex )
Realmente as informações são atualizadas mesmo que o foco não esteja na tela.

Aí começou a acontecer uma coisa estranha.

Em determinados pontos do processamento a rotina simplesmente encerra, retornando o processamento para a tela principal.

Ou seja: Parece que o DO EVENTS tem algumas particularidades especiais que devem ser observadas (ou é o HB_IdleSleep( 1 ) ????).
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

DO EVENTS

Mensagem por HASA »

:-o
Hasse, use somente o do events retire o outro comando ok.

HASA
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

DO EVENTS

Mensagem por alxsts »

Olá!

Operações de preenchimento de textos de labels e text boxes não são pesadas, a não ser que estejam dentro de um loop. Se o código mostrado não estiver dentro de um loop, não é necessário invocar DO EVENTS tantas vezes. Deixe apenas a última chamada.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

DO EVENTS

Mensagem por HASA »

:))
Olá Hasse, bem colocado pelo colega alxsts, use o DO EVENTS com moderação, ou seja, a cada carga de varios eventos 1 do events, ok.
:)Pos
HASA
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

DO EVENTS

Mensagem por Mario Mesquita »

Pessoal, boa noite.

Tenho um programa que também, dá esse "branco" de tela em algumas operações, principalmente se o usuário tira o foco para outro aplicativo. Ao voltar ao programa ele fica com a tela aparentemente travada com aquele prompt do windows "girando". Embora ele continue processando, o usuário acha que está travado e aborta o programa. Imagino que isso dependa de coisas como: capacidade da máquina, quantas janelas abertas etc.

Vendo esse post, acho que o DO EVENTS pode resolver isso. Como nunca o usei, pergunto a vocês:

Qual as operações que mais podem causar esses problemas que o comando pode evitar?

Como devo usa-lo? No início do módulo ou antes de um loop em uma tabela, por exemplo?

Reparei que o uso do objeto BROWSE da MiniGui, deixa o programa lento algumas vezes. Seria o caso de usar o DO EVENTS na hora de abrir um browse, que em tese edita e navega numa tabela inteira?

Desde já, agradeço qualquer dica.

Saudações,
Mario.
Responder