CAPÍTULO 4
Programação visual com Software Livre
EDIT LIN EDITORIAL S.L,  dos autores  Daniel Campos Fernández e José Luis Redrejo.  Prólogo de Benoit Minisini


O descritor de processo


Observamos que a princípio a sintaxe de EXEC, se indica um valor opcional VARIAVEL=, que recebe algo de retorno ao chamar EXEC. Esta variável é um objeto da classe Process, e o que se recebe é um descritor de processo que lançamos. Os objetos da classe Process tem uma série de propriedades que nos permite conhecer o estado do processo, assim como atuar sobre ele.

O que nos interessa agora é a propriedade State, que reflete o estado de execução. Quando se lança um processo, o valor de State é Process.Running, quer dizer, processo em execução. Se o processo já terminou, a variável poderá tomar os valores Process.Stopped, detido, finalizado, ou Process.Crashed, se finalizou devido a um erro grave, habitualmente uma violação de segmento.

Utilizando esta propriedade teremos a capacidade de sincronizar os dois processos de um modo mais eficiente: poderemos realizar algumas tarefas em nosso programa Gambas, no entanto esperamos   que  finalize  o  processo  auxiliar.  Tipicamente,  o  que  faremos  será  dar  algo  de feedback ou informação ao usuário de que deve esperar. Como exemplo, vamos baixar um arquivo da internet quando o usuário pressionar um botão, e avisa-lo de que estamos trabalhando, que a aplicação está pendente, e que deve esperar com paciência.

Vamos trabalhar com a aplicação auxiliar curl, que é um programa de linha de comandos que permite precisamente o que queremos: baixar um arquivo de uma URL. Se não tivermos o curl já instalado, aproveitaremos para faze-lo agora, já que está disponível para todas as distribuições GNU/Linux habituais, assim como para FreeBSD. Para isso, consultamos a partir do Synaptic, Yast, RpmDrake ou nosso gestor preferido de pacotes em outras distribuições.

O que baixaremos é um programa em Gambas chamado RadioGambas, cujo código contem um bom exemplo de gestão de processos e que também podemos estudar. Alem disso nos serve para escutar programas de rádio emitido pela internet, o qual não está mal. A URL é http://gambas.gnulinex.org/radiogambas/radiogambas-1.0.1.tar.gz, ainda podemos consultar em http://gambas.gnulinex.org/radiogambas a existência de uma versão mais recente.

Agora, vamos criar um programa gráfico e um formulário, com um botão chamado Downloads e um label chamado LblInfo.

O label terá como propriedade text o valor Inativo e o botão terá o texto Downloads
Figura 1
Figura 1. Valor Inativo do Label e botão Downloads

O código do formulário será o seguinte:


PUBLIC SUB BtnDownloads_Click()

DIM hProc AS Process

DIM sUrl AS String


sUrl = "http://gambas.gnulinex.org/radiogambas/radiogambas-1.0.1.tar.gz"

hProc = EXEC ["curl", sUrl, "-o", User.home & "/RadioGambas.tar.gz"]


DO WHILE hProc.State = Process.Running

SELECT CASE LblInfo.Text

CASE "|"

LblInfo.Text = "/"  

CASE "/"

LblInfo.Text = "-"

CASE "-"

LblInfo.Text = "\\"

CASE "\\"

LblInfo.Text = "|"

CASE ELSE

LblInfo.Text = "|"

END SELECT

WAIT 0.1

LOOP

LblInfo.Text = "Inativo"

Message.Info("Download Finalizado")

END

Executamos o processo  com  os  parâmetros  necessários  para  que  o download seja para nossa pasta pessoal com o nome RadioGambas.tar.gz, e recebemos uma descrição do processo. Seguidamente, entramos em um loop que se executa enquanto o processo está ativo, quer dizer, enquanto o estado do processo é Process.Running. E faz o loop trocar o valor do texto do Label entre os valores “-”, “|”, “/”, e “\”, de forma que se gera a ilusão de uma hélice, com o qual o usuário sabe que algo tá acontecendo por baixo. Com a instrução WAIT refrescamos a interface. Ao terminar, informamos ao usuário e repomos os valores originais do label.

Voltamos a modificar o programa eliminando o código da hélice e executando o programa de forma síncrona, como explicamos com o flag WAIT:


Hproc = EXEC [ “curl” sUrl “-o” System.Home“/RadioGambas.tar.gz” ] WAIT


O funcionamento é igualmente eficiente: o programa baixa o arquivo em ambos os casos, porem agora a interface do usuário fica bloqueada durante o download, o que pode fazer pensar que nosso programa está congelado e gerar algumas chamadas inúteis a nossos serviços de atendimento ao cliente, no pior dos casos. É importante, por isso, avaliar em que caso é conveniente usar o WAIT nos quais é melhor informar, de alguma maneira, ao usuário que mantenha a calma e as mãos longe do telefone.









Cópia literal

Extraído do livro “GAMBAS, programação visual com software Livre”, da editora EDIT LIN EDITORIAL S.L,  dos autores  Daniel Campos Fernández e José Luis Redrejo. Prólogo de Benoit Minisini

LICENSA DESTE DOCUMENTO


É permitido a cópia e distribuição da totalidade ou parte desta obra sem fins lucrativo. Toda cópia total ou parcial devera expressar o nome do autor e da editora e incluir esta mesma licença, adicionando se é uma cópia literal “Cópia literal”. Se é autorizada a modificação e tradução da obra  sem fins lucrativo sempre se deve constar na obra resultante  a modificação o nome da obra original o autor da obra original e o nome da editora e a obra resultante também deverá ser livremente reproduzida, distribuída, ao publico e transformada em termos similares ao exposto nesta licença.

Tradução

Cientista
 (Antonio Sousa)