4D v16 R6 introduz um novo conceito de comunicação entre processos: objecto partilhado e variáveis de colecção partilhadas! São uma solução para que se possa evitar a utilização de variáveis interprocessadas (que não podem ser utilizadas em modo multi-tarefa). Graças a isto, poderá facilmente partilhar informação entre processos preventivos.
Novo conceito: objectos partilhados / colecções
No mundo da programação informática, quando se precisa de desempenho, quanto menos se partilham dados, mais eficiente se é. Mas, claro, na maioria dos casos, os processos que criou devem comunicar em conjunto. Seja para enviar parâmetros, para obter resultados ou simplesmente para aceder a alguma informação partilhada. Esta é a razão pela qual foram criados objectos e colecções partilhadas! (Basta lembrar que os objectos e colecções regulares não podem ser partilhados entre processos. Quando estes são passados como parâmetros, é criada uma cópia dos objectos).
Os objectos partilhados e as colecções partilhadas comportam-se exactamente como os normais, excepto que devem ser declarados como “partilhados” durante a sua instanciação com os novos comandos seguintes: Novo objecto partilhado e Nova colecção partilhada. Uma vez instanciados, podem ser utilizados directamente, como qualquer outro, para a leitura. Não é necessário semáforo ou qualquer outra coisa, apenas usar os objectos partilhados.
Para escrever ou modificar, os objectos partilhados devem ser rodeados pelas palavras-chave Use e End use. Estas palavras-chave definem semáforos internos, e devem ser utilizadas para aceder ao conteúdo de objectos e colecções no modo de escrita. A utilização destas palavras-chave é realmente fácil, muito mais fácil do que os semáforos em linguagem 4D. Como assim? Não se pode esquecer de as libertar. O uso e o uso final envolvem sempre as variáveis, pelo que não se pode esquecer de libertar o cadeado.
$object:=New shared object
$ps:=New process("my process";0; "myprocess";$object) // enviado como referência
Use ($object)
$object .myAttribute:=10
End use
Como utilizá-los noutros processos?
Poderá estar a perguntar-se: Como posso utilizar um objecto partilhado de outro processo (de outra forma que não seja o envio de um parâmetro)? Como posso partilhar sem variáveis interprocessadas?
Um objecto “super-compartilhado” resolve isto. Um novo comando, Armazenamento, dá acesso a este objecto, para todos os processos em execução.
Este objecto é único em cada máquina. Um (em modo Single User), caso contrário um por cliente e um no servidor. O comando Armazenamento devolve o objecto partilhado para que possa ser manipulado como qualquer outro objecto partilhado, mas só pode conter objectos partilhados ou colecções partilhadas. (Note-se que os componentes podem conter Armazenamento também o seu próprio)
Use (Armazenamento)
Storage .myCollection:=New shared collection
End use
Benefícios
Objectos partilhados e colecções partilhadas têm muitas vantagens em comparação com variáveis interprocessadas padrão, tais como:
- sem necessidade de protecção na leitura: acesso rápido
- Uso e Uso Final Palavras-chave evitar erros de codificação resultando em cenários de impasse
- porque os objectos ou colecções são geralmente hierárquicos (contendo outros objectos ou colecções), ao bloquear um objecto bloqueia-se toda a cadeia de uma só vez, melhorando o desempenho.
Habituar-se-á rapidamente a objectos e colecções partilhados e tornar-se-á uma forma natural de programação 🙂