Programação orientada a eventos em Windows

Existem dois tipos de interfaces de utilizador mais usuais. Aquelas baseadas em comandos textuais, característica dos sistemas mais antigos e as gráficas. Estas últimas têm a designação habitual de GUI (Graphic User Interface) e, ao invés de assentarem na escrita de comandos numa consola, as acções são efectuadas mediante a manipulação dos respectivos elementos gráficos. O exemplo mais fulcral consiste na interface Windows fundamentalmente construída sobre um tipo particular de objectos gráficos, as janelas. A interacção do utilizador com o programa é conseguida com o auxílio de periféricos tais como o rato ou o teclado.

Quando o utilizador pressiona o botão de um rato ou do teclado, o sistema operativo envia um sinal ao programa indicando uma possível interacção do utilizador. Esse sinal tem a designação habitual de evento. No Windows existe uma série de eventos que podem ser disparados, tais como o clique de um rato, o pressionar de uma tecla, o mover um janela, entre outros.

Deste modo, um programa habitual cria uma janela com o layout útil para uma boa comunicação com o utilizador e processa os eventos de forma a coadunar uma resposta. É necessária uma compreensão básica do funcionamento estrutural de um programa do género. O Windows é um sistema operativo multitarefa. Deste modo, permite a execução concorrente de programas, isto é, permite a execução de vários programas em simultâneo. É possível estar a desenhar no AutoCAD enquanto vamos tirando notas no Word. Quando um programa é executado, o sistema operativo cria um processo para executar as respectivas instruções e divide o tempo de processamento entre cada processo criado, atribuindo-lhe recursos próprios tais como endereçamento virtual de memória. Por seu turno, cada programa ainda pode ser implementado com características multitarefa por intermédio do multithreading. Um thread consiste na repartição de um programa em uma ou mais tarefas concorrentes que partilham os mesmos recursos relativos ao processo associado ao programa. O sistema cria uma fila de mensagens para cada thread, onde dirige as mensagens associadas a um evento.

Cada thread tem de criar uma janela de modo a poder utilizar a fila de mensagens do sistema. Isto acontece uma vez que são as janelas os elementos para os quais são dirigidos os eventos gráficos relativos à respectiva GUI. A interface de desenvolvimento do Windows, a API, proporciona um vasto conjunto de funções de sistema, entre as quais se contam aquelas orientadas para a criação de janelas e manipulação de mensagens. O programa inicia-se na função WinMain. De modo a que o programa responda aos eventos de forma conveniente, cria um loop onde consulta as mensagens da fila e as despacha para uma função previamente definida que permite executar o código conforme a mensagem que foi consultada. Este aspecto é conhecido como Message Loop. Atente-se no seguinte esquema de fluxo.

fluxo_reduzida

 

A função GetMessage da API bloqueia até o sistema dirigir uma mensagem à fila. Quando uma mensagem entra na fila, esta é despachada para uma função que a vai processar. De facto, a janela contém um apontador para esta função, o qual é associado durante o processo da sua construção, incluindo todos os outros parâmetros característicos tais como título, ícone, etc. As funções que tratam eventos (de facto são apontadores para funções) são conhecidas como funções callback, por passarem código como parâmetro para outro código. A função GetMessage comporta-se como o scanf da stdio que congela o segmento de código onde se encontra até obter uma entrada da consola (isto é, bloqueia até entrada do utilizador).

Convém ter em mente que, quando uma mensagem é lida da fila, o loop não continua enquanto a função callback não retorna. Neste caso, se essa função recebe uma mensagem para efectuar um processamento moroso, o programa não trata outros eventos enquanto este não terminar, bloqueando a janela. Nestes casos é conveniente criar um thread sempre que se pretenda efectuar um processamento muito pesado.

Sobre Sérgio O. Marques

Licenciado em Física/Matemática Aplicada (Astronomia) pela Faculdade de Ciências da Universidade do Porto e Mestre em Matemática Aplicada pela mesma instituição, desenvolvo trabalho no PTC (Porto Technical Centre) - Yazaki como Administrador de bases-de-dados. Dentro o meu leque de interesses encontram-se todos os temas afins às disciplinas de Matemática, Física e Astronomia. Porém, como entusiasta, interesso-me por temas relacionados com electrónica, poesia, música e fotografia.
Esta entrada foi publicada em Computadores e Internet. ligação permanente.

Uma resposta a Programação orientada a eventos em Windows

  1. Bolachaa diz:

    Boa informação (:

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s