Minha abordagem. O núcleo é o motor. - página 98

 
Como dica sobre como fazer isso, veja a estrutura de um arquivo zip. É composto de estruturas e dados simples. Uma estrutura semelhante poderia ser ótima para a transferência de dados. Note que não há uma única linha no arquivo zip, o que não impede que ele exiba perfeitamente um sistema de arquivos em miniatura com centenas de arquivos com nomes diferentes.
 
Vasiliy Sokolov:
Como uma dica de como fazer isso, veja a estrutura do arquivo zip. É composto de estruturas e dados simples. Uma estrutura semelhante poderia funcionar bem para a transferência de dados. Note que não há uma única linha no arquivo zip, o que não impede que ele exiba perfeitamente um sistema de arquivos em miniatura com centenas de arquivos com nomes diferentes.

Concordo com sua visão profissional sobre a tarefa. A transferência de bytes parece mais séria do que a transferência de cordas via objetos MT.

A questão é como é viável implementar.

O tamanho e os tipos de dados a serem transferidos não são conhecidos de antemão. Como implementá-la?

 
Реter Konow:

Concordo com sua visão profissional sobre a tarefa. A transferência de bytes parece mais séria do que a transferência de cordas via objetos MT.

A questão é o quão viável é implementá-la.

O tamanho e os tipos de dados a serem transferidos não são conhecidos de antemão. Como implementar a união?

É possível.

Por favor, estude a estrutura de seu zíper em detalhes. Um entendimento virá. O tamanho dos arquivos embalados antes da embalagem não é conhecido. Os nomes dos arquivos podem ser de tamanhos diferentes. O número de arquivos também pode ser muito diferente. Independentemente disso, o fecho representa um conjunto estritamente tipificado de estruturas finitas que fazem referência aos dados.

Uma vez que você sabe com quais estruturas você precisa trabalhar, não há problema com o sindicato, porque o sindicato é simplesmente uma representação dessas estruturas como bytes.

 
Vasiliy Sokolov:

Possível.

Estudar a estrutura do fecho em detalhes. Um entendimento virá. O tamanho dos arquivos embalados antes da embalagem é desconhecido lá. Os nomes dos arquivos podem ser de vários comprimentos diferentes. O número de arquivos também pode ser muito diferente. Independentemente disso, o fecho representa um conjunto estritamente tipificado de estruturas finitas que fazem referência aos dados.

Quando você descobrir com quais estruturas você precisa trabalhar, não terá nenhum problema porque você pode simplesmente representar estas estruturas como bytes.

Está bem, mas por que você não faz sem um sindicato, por exemplo?

Em cada evento, a EA coleta uma cadeia de mensagens, que inclui todos os parâmetros alterados e seus valores de todos os tipos. Em seguida, convertemos esta seqüência em uma matriz de bytes usando StringToChar, e a escrevemos em um recurso. Em seguida, fazemos a desembalagem inversa.

Inicialmente, eu havia imaginado uma solução desse tipo com o recurso. Mas, precisa montar e dividir o cordel.

 
Você não pode passar sem um recurso em sua solução de qualquer maneira. Portanto, a questão é como contornar a análise do fio. Você acha que isso é possível. Sinceramente, duvido disso. Mas eu não descartaria...
 
Реter Konow:

Está bem, mas por que não prescindir da união, por exemplo.

Em cada evento, a EA coleta uma cadeia de mensagens incluindo todos os parâmetros alterados e seus valores de todos os tipos. Em seguida, convertemos esta seqüência em uma matriz de bytes usando StringToChar, e a escrevemos em um recurso. Em seguida, fazemos a desembalagem inversa.

Inicialmente, eu havia imaginado uma solução desse tipo com o recurso. Mas, é preciso montar e dividir o cordel.

A união é uma representação simultânea de estruturas como bytes ou int, o que é a mesma coisa. A União parece projetar estruturas em uma matriz de bytes enquanto a matriz de bytes é simultaneamente um conjunto de estruturas. Se o recurso for uma matriz int, não há necessidade de realizar o procedimento adicional de conversão de uma matriz de bytes em uma matriz de estruturas e a operação reversa. Isto economiza tempo.

p.s. Com este esquema, a fonte da mensagem não copia dados para o recurso, ela muda os dados diretamente, e estas mudanças aparecem imediatamente no recurso. Assim, em vez de conversões infinitas de cordas para arrays, e arrays para arrays para arrays com subseqüentes parsing, você trabalha com os dados diretamente. Estes dados são copiados somente para destinatários que utilizam ResourceReadImage.

 
Vasiliy Sokolov:

União é a representação simultânea de estruturas como bytes ou int, que é a mesma coisa. As estruturas do tipo união de projetos sobre uma matriz de bytes, e a matriz de bytes é simultaneamente um conjunto de estruturas. Se o recurso for uma matriz int, não há necessidade de realizar o procedimento adicional de conversão de uma matriz de bytes em uma matriz de estruturas e a operação reversa. Isso economiza tempo.

Terei que pensar sobre isso... Talvez você esteja certo, e é possível implementar com o sindicato.

Por exemplo, se cada definição de um valor de parâmetro converteria esse valor em um conjunto de bytes. Mais precisamente, todos os parâmetros do usuário, devem pertencer ao sindicato. Então, sua cópia refletida em bytes estará imediatamente disponível para escrita ao recurso.

 
Реter Konow:

Por exemplo, se cada configuração de um valor de parâmetro, converterá esse valor em um conjunto de bytes. Mais precisamente, todos os parâmetros do usuário devem pertencer ao sindicato. Então, sua cópia byte-refletida ficaria imediatamente disponível para escrita ao recurso.

Sim, exatamente, eu já respondi em ps ao post anterior, quando você o escreveu :) Isto é, não estamos trabalhando com uma longa cópia e conversão, mas exatamente mapeamento.

 
Em resumo, toda vez que um valor de parâmetro de usuário é alterado, o valor deve ser convertido no valor de uma variável unitária e imediatamente salvo em uma matriz de bytes comum, que pode então ser convertida em uint e escrita em um recurso.
 
Vasiliy Sokolov:

Sim, exatamente, eu já respondi no PS ao post anterior quando você escreveu isto:) Isto é, não estamos trabalhando com longas cópias e conversões, mas exatamente no mapeamento.

OK, mas e os textos?

Eles devem ser convertidos em bytes viaStringToChar(). Você não pode usar o sindicato, certo?